将输出参数设置为Select语句的结果

时间:2014-06-24 19:26:32

标签: sql-server stored-procedures output-parameter sql

我使用MS-Access 2010前端,在那里我调用了存储过程和MS-SQl server 2008后端,在那里我应用了存储过程的脚本。我创建了一个存储过程来检索TestID,其中输入参数与两个连接表中的值匹配。我的问题是尝试捕获select语句返回的输出参数。这是我的SQL存储过程

CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60), @RecordsAffected int OUT
AS

SELECT TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID; 
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte
set @RecordsAffected = @@Identity

GO

我研究了一些方法,似乎我应该使用SET语句,但我不知道如何捕获值。此示例始终返回零。

我在想也许这样的事情会起作用:

CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60), @RecordsAffected int OUT
    AS

    SELECT @RecordsAffected = (SELECT TestID = t1.TestID
    FROM tblWOSampleTest t1
    JOIN tblTest t2
    ON t1.TestID=t2.TestID; 
    WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte)


    GO

但这也不起作用。有没有办法将SELECT语句的返回值存储到变量?

1 个答案:

答案 0 :(得分:2)

如果您正在查看返回testId并且只提供了一个匹配条件的testId - 您可以使用以下作为您的select语句 -

SELECT @RecordsAffected = t1.TestID
FROM tblWOSampleTest t1
     JOIN tblTest t2 ON t1.TestID=t2.TestID; 
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte

此外,您可能希望将Output参数重命名为(@OutputTestId或@TestId),因为@RecordsAffected这个名称错误地指示了它的实际含义。