所以,在我的存储过程中,我有
Update Table
Set Table.Value = 2
Where Table.ID In (1,2,3)
我调用存储过程,我想传入1,2,3。 此列表中存在未知数量的值,因此我不能仅使用多个变量。
我尝试了以下但是这不起作用
Declare @IDS Varchar = '1,2,3';
Update Table
Set Table.Value = 2
Where Table.ID In (@IDS)
在T-SQL中是否有一个数组类型(或类似的)允许我为此目的传递多个值?
由于
答案 0 :(得分:0)
您可以将表变量传递给存储过程或xml变量。我更喜欢xml,因为它更有弹性。
示例:
GO
CREATE PROCEDURE #tmpProcedure
@xml xml
AS
UPDATE tbl SET
Value = 2
FROM table tbl
WHERE 1 = 1
AND EXISTS (SELECT 1
FROM @xml.nodes('IdsToUpdate/Id') t(x)
WHERE 1 = 1
AND t.x.value('.','int') = tbl.Id
)
GO
DECLARE @xml xml =
'
<IdsToUpdate>
<Id>1</Id>
<Id>14</Id>
<Id>15</Id>
<Id>2</Id>
</IdsToUpdate>
'
GO
EXEC #tmpProcedure @xml