如何在存储过程中的输出参数中返回值数组

时间:2015-09-03 09:47:57

标签: sql sql-server sql-server-2008 null isnull

我有情况通过存储过程发送状态为Inactive的ID。此外,在同一个SP中,一旦我发送了非活动ID,我需要将其更新为活动状态。所以我在交易中这样做。但是不知道如何发送ID集以及我的更新是否正确。我想我需要循环更新?请帮我修建。

Create Proc Name
@ID VARCHAR INT OUT
AS
BEGIN

BEGIN TRAN
SELECT @ID = ID From MyTable
WHERE IDType = 1 AND B ='Rev'

Update MyTable
Set IDType = 2
WHERE IDType = 1 AND B='Rev'
COMMIT TRAN
END

1 个答案:

答案 0 :(得分:2)

您可以使用OUTPUTSELECT子句在存储过程中执行OUTPUT,而不是使用INTO参数。这是一个例子:

让我们创建测试数据:

CREATE TABLE MyTable(
    ID  INT IDENTITY(1, 1),
    IDType  INT,
    B   VARCHAR(6)
)
INSERT INTO MyTable(IDType, B) VALUES
(2, 'Rev'), (2, 'Rev'),
(2, 'Rev'), (1, 'Rev'),
(1, 'Rev'), (1, 'Rev'),
(1, 'NotRev'), (1, 'NotRev');

MyTable的:

ID          IDType      B
----------- ----------- ------
1           2           Rev
2           2           Rev
3           2           Rev
4           1           Rev
5           1           Rev
6           1           Rev
7           1           NotRev
8           1           NotRev

我们想要的是更新行WHERE IDType = 2 AND B = 'Rev'。在这种情况下,要更新的行是ID IN(4, 5, 6)

现在创建存储过程:

CREATE PROCEDURE MyStoredProc
AS
BEGIN

    UPDATE MyTable
        SET IDType = 2
    OUTPUT INSERTED.ID -- Returns the IDs of the updated rows
    WHERE 
        IDType = 1
        AND B = 'REV'

END

要获取更新的行,请使用OUTPUT子句。

执行存储过程将返回:

ID
-----------
4
5
6