使用存储过程的值()中的值

时间:2017-06-13 11:25:27

标签: sql-server sql-server-2008 tsql stored-procedures

所以,在我的存储过程中,我有

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中是否有一个数组类型(或类似的)允许我为此目的传递多个值?

由于

1 个答案:

答案 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