SQLステートメントを実行する前に、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)
ただし、これら2つの変数のスコープは内部 動的に実行されるSQLであり、スクリプトの「外部」では使用できません。