0

我使用 MS-Access 2010 前端,我在其中调用存储过程和 MS-SQl 服务器 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 语句的返回值存储到变量中?

4

1 回答 1

2

如果您正在考虑返回 testId 并假设您只有一个 testId 用于匹配条件 - 您可以使用以下内容作为您的选择语句 -

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

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

于 2014-06-24T19:41:54.990 回答