2016-10-13 5 views
0

クエリ内でspからデータを取得し、変数に設定したいとします。次 は私のクエリSQL Serverのクエリでストアドプロシージャから変数を設定する方法

WHILE ((SELECT COUNT(*) AS [COUNT] 
      FROM (SELECT TOP 1 tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO 
       FROM dbo.tbl_PurchaseRequisitionOrOrder 
       WHERE tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO IS NOT NULL 
       ORDER BY tbl_PurchaseRequisitionOrOrder.PROId DESC 
       ) AS T122 
     ) > 0) 
    DECLARE @rr VARCHAR(9)= (SELECT TOP 1 tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO 
           FROM dbo.tbl_PurchaseRequisitionOrOrder 
           WHERE tbl_PurchaseRequisitionOrOrder.AdditionalRefNumberPO IS NOT NULL 
           ORDER BY tbl_PurchaseRequisitionOrOrder.PROId DESC 
          ); 
      SET @rr= EXEC dbo.GetAddiRefNumberPO @rr 

ですが、私は、キーワード「EXEC」付近に不適切な構文 を取得しています。

SET @rr= EXEC dbo.GetAddiRefNumberPO @rr 

私は、SQL Serverの2014 を使用しています:)

+1

'EXEC dbo.GetAddiRefNumberPO @rr OUTPUT' – artm

答えて

1

あなたが変数にSPからのデータを入れたい場合 - あなたはOUTPUTを使用する必要があります。

ALTER PROCEDURE dbo.GetAddiRefNumberPO 
    ... 
    @rr VARCHAR(9) OUTPUT 
AS 
... 

その後、あなたのようにそれを使用することができます。最後に

DECLARE @rr VARCHAR(9); 

EXECUTE dbo.GetAddiRefNumberPO ... @rr = @rr OUTPUT 

SELECT @rr 

あなたが得る選択SP実行から得られた値。

主な質問は、WHILEループを使用しているため、@rrを取得してSPに渡し、その変数にSPからの出力を書き込もうとしますが、次に実行するとクエリから別の@rrが返されます。別の変数を使用する必要がありますか?このクエリの目的は何ですか?

0

はまず助けてください、あなたのIF状態でCOUNT()を使用する必要はありません。ちょうどEXISTSを使用してください。

第二に、あなたはBEGIN/ENDが必要になります。

WHILE (. . .) 
BEGIN 
    DECLARE @rr VARCHAR(MAX)= (SELECT TOP 1 o.AdditionalRefNumberPO 
           FROM dbo.tbl_PurchaseRequisitionOrOrder o 
           WHERE o.AdditionalRefNumberPO IS NOT NULL 
           ORDER BY o.PROId DESC); 
    EXEC dbo.GetAddiRefNumberPO @rr ; 
END; 

注:

  • ストアドプロシージャ、整数ではなく、文字列を返します。したがって、戻り値が必要な場合は、文字列変数ではなく整数変数が必要です。しかし、あなたはリトバルを使用していないので、私はそれを削除しました。
  • WHILEが変数@rrを宣言していたため、エラーが発生しました。 は、WHILEループの次のステートメントでした。
  • 私はあなた常には、WHILEIFとして、任意の制御ステートメントのBEGIN/ENDを使用することをお勧めします。今、あなたはその理由を知っている。
  • テーブルのエイリアスを使用すると、クエリの書き込みと読み込みが簡単になります。
関連する問題