0

これは、SQL Server で実行しようとしている次のコードです。

DECLARE @string NVARCHAR(MAX) = '
    CREATE PROC [dbo].[Trend]
    @slsID NVARCHAR(20)
    AS
    BEGIN
    SET NOCOUNT ON
    DECLARE @BeginningRange varchar(20),
    @EndingRange varchar(20)
    SET @EndingRange = ''12*13''
    SET @BeginningRange = ''12*02''
    ;WITH CTE1 AS(
             SELECT 
             dbo.Field1,dbo.Field2,dbo.Field3
             FROM dbo.Table1 join dbo.Table2 where...conditions
             weekNum BETWEEN (@BeginningRange) AND (@EndingRange)
                 )
    SELECT * FROM CTE1 
    UNPIVOT
      ( numbers for type in (Field1, Field2, Field3, Field4)
      ) as p PIVOT
      (
      Sum(numbers) for
      WeekNum in ([12*02],[12*03],[12*04],[12*05],[12*06],[12*07],[12*08],[12*09],[12*10],                                                         [12*11],[12*12],[12*13])
      ) as q
      END
'
    EXECUTE SP_EXECUTESQL @STRING

これを実行しようとすると、次のようにエラーになります

「キーワード 'as' 付近の構文が正しくありません」

このコードを取り出して個別に実行しましたが、エラーは発生しませんでした。ここで何か不足していますか?

4

3 に答える 3

1

プロシージャのパラメータを囲む括弧が欠落しているように見えます。

使用できるトリックの 1 つは、SQL ステートメントを出力してから実行することです。エラー メッセージで詳細情報が得られる場合があります。

print @STRING
于 2012-02-23T20:18:46.453 に答える
0

PIVOT 句と UNPIVOT 句には、それぞれ 2 つの閉じ括弧が必要です。

UNPIVOT (... FOR ... IN (...) ) AS ...

PIVOT (... FOR ... IN (...) ) AS ...

于 2012-02-23T20:28:55.163 に答える
0
where...conditions 

これは構文チェックに合格しません。実際の条件を削除した場合、これがエラーの原因である可能性があります。と:

dbo.Table1 join dbo.Table2 

ON句がない

print @string の結果に対して構文チェックを行うことで、これらの両方を確認しました。これは、問題を見つけるための最初のステップです。あなたが私たちに与えてくれたことに基づいて、動的SQlを使用する理由はまったくなく、必要がない場合に動的SQLを使用することはお勧めできません.

于 2012-02-23T21:54:19.283 に答える