我正在使用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但它只讨论插入多个参数,而我正在尝试做的是更新多个记录(如果它们存在)。我刚开始学习这些概念,有人能指出我正确的方向吗?
编辑:我想将要更新的名称列表传递给存储过程。我不想多次调用存储过程,而只想调用一次。
答案 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