在一次通话中更新多条记录

时间:2013-10-25 10:10:17

标签: sql sql-server-2008 table-valued-parameters

我正在使用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但它只讨论插入多个参数,而我正在尝试做的是更新多个记录(如果它们存在)。我刚开始学习这些概念,有人能指出我正确的方向吗?

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

1 个答案:

答案 0 :(得分:0)

此存储过程需要一个由逗号分隔的名称组成的字符串。将此字符串转换为xml并使用xml functionallity获取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