5

まったく同じコードがクエリとして完全に実行されますが、ストアド プロシージャを作成しようとすると構文エラーが発生します。私は自分でエラーを見ることができないので、助けていただければ幸いです。

エラーは次のとおりです。

メッセージ 102、レベル 15、状態 1、プロシージャ DataSelect、行 12 'OrderedYTD' 付近の構文が正しくありません。

そして、コードは単純です:

CREATE PROCEDURE DataSelect
(
@TargetPdc int
)
AS
BEGIN

    -- Refresh Data Here
    EXEC DataUpdate

    -- Select Data for Report
    WITH OrderedYTD AS
    (
        SELECT custextract.*, histextract.*,
      ROW_NUMBER () OVER (PARTITION BY custextract.custcustno ORDER BY histextract.salesytd desc) AS RowNumber
        FROM custextract 
        INNER JOIN histextract 
            ON custextract.custcustno = histextract.histcustno
        WHERE (custextract.ecall = 'Y')
    ) 

SELECT OrderedYTD.*
FROM OrderedYTD
WHERE RowNumber <= 10 and pdc = @TargetPdc;

END

WITH ステートメント (WHERE 句の変数を除く) で始まるすべてを問題なくクエリとして複数回実行しました。ストアド プロシージャ内で CTE を使用すると、構文上の違いはありますか? ありがとう。

4

1 に答える 1

4

の前にセミコロンが必要ですWITH。それ以外の場合は、前のステートメントの修飾子として扱われます。この行を変更するだけで動作するはずです:

EXEC DataUpdate;

すべてのステートメントをセミコロンで終了しない場合、標準的な方法はセミコロンをCTE定義の前に置くことです:

;WITH OrderdYTD AS
于 2013-06-27T17:16:35.270 に答える