0

我正在使用 MS SQL Server 2008,我必须更新其中一个表中的一长串名称。我想传递一个名称列表,并通过向它们添加前缀来更新它们。假设我将 X、Y、Z 传递给存储过程,并将它们更新为 Disable_X、Disable_Y、Disable_Z。

我认为表值参数是我正在寻找的,我已经阅读了http://www.sommarskog.se/arrays-in-sql-2008.html#TVP_in_TSQL但它只讨论了插入多个参数和我的内容我尝试做的是更新多个记录(如果存在)。我刚刚开始学习这些概念,所以有人能指出我正确的方向吗?

编辑:我想将要更新的名称列表传递给存储过程。不必多次调用存储过程,我只想调用一次。

4

1 回答 1

0

此存储过程需要一个由逗号分隔的名称组成的字符串。将此字符串转换为 xml 并使用 xml 功能获取 xml 的所有元素的列表。未经测试:

CREATE PROCEDURE [dbo].[MultiUpdate] 
(   
    @valuelist varchar(MAX) 
) AS 

    DECLARE @xml as xml

    SET @xml = cast(('<X>'+replace(@valuelist,',' ,'</X><X>')+'</X>') as xml)

    UPDATE yourtable SET name='DISABLE_'+name Where name in (SELECT N.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as T(N))

    RETURN
于 2013-10-25T12:12:05.807 回答