0

私は、MS-Access 2010 フロントエンドでストアド プロシージャを呼び出し、MS-SQl サーバー 2008 バックエンドでストアド プロシージャのスクリプトを適用して作業しています。入力パラメーターが 2 つの結合されたテーブルの値と一致する 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 が 1 つしかない場合は、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

さらに、出力パラメーターの名前を (@OutputTestId または @TestId) のような名前に変更することをお勧めします。これは、@RecordsAffected という名前が実際の意味を誤って示しているためです。

于 2014-06-24T19:41:54.990 に答える