2013-11-27 189 views
5

ストアドプロシージャを記述していますが、テーブル名をパラメータとして渡していますが、一部:私は、私はこのエラーを取得するこのクエリを実行した後SQL Server:メッセージ102、レベル15、状態1、行2メッセージ '='の近くの構文が正しくありません

DECLARE 
@TableA nvarchar(255)='TableA', 
@DOCID1 nvarchar(MAX), 
@DOCID2 int; 

EXEC (' 
SELECT TOP (1) '+ @DOCID1 +'=DOCID1,'+ @DOCID2 +'=DOCID2 
FROM [' + @TABLEA + '] 
ORDER BY DOCID2') 

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '='

この時点で、私はいくつかの助けを必要とし、私が試していると私は、エラーを特定することはできません。..

答えて

2

私はあなたがそれを実行する前に、一緒に全体としてSQL文を連結しなければならないと考えています:

DECLARE 
    @TableA nvarchar(255)='TableA', 
    @DOCID1 nvarchar(MAX), 
    @SqlStmt NVARCHAR(500), 
    @DOCID2 int; 

SET @SqlStmt = N'SELECT TOP (1) ' + @DOCID1 + N' = DOCID1, ' + @DOCID2 + N' = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2'; 

EXEC (@SqlStmt) 

は、私の知る限り、あなたがEXECコマンドの内部表現や計算をすることはできません思い出すよう - 手の前に準備されたステートメントを取得し、それを実行

また、あなたの変数が何を保持しているかわからない - @DocID1@DocID2 - その値を設定したいのですか、それとも別の変数の名前を保持していますか?

更新:あなたが実際に@DocID1@DocID2の値を設定したい場合は、あなたのクエリがそもそも間違っていた - あなたはこのようなものが必要です。

DECLARE 
    @TableA nvarchar(255) = 'TableA', 
    @SqlStmt NVARCHAR(500); 

SET @SqlStmt = 
    N'DECLARE @DocID1 NVARCHAR(MAX), @DocID2 INT; ' + 
    N'SELECT TOP (1) @DOCID1 = DOCID1, @DOCID2 = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2'; 

EXEC (@SqlStmt) 

をが、その後、これらの二つの変数有効範囲は動的に実行されるSQLであり、スクリプトの「外側」では使用できません。

+0

選択の結果から値を設定したいだけです。 – RicEspn

+0

あなたの助けに感謝しましたMarc_s – RicEspn

1

どのバージョンのSQL Serverですか? - sytax

DECLARE 
@TableA nvarchar(255)='TableA' 

はあなたが書かなければならない古いバージョンでは唯一のSQL Server 2008からサポートされています:

DECLARE 
@TableA nvarchar(255) 
SET @TableA ='TableA' 
+0

SQL Server 2008 – RicEspn

関連する問題