2

sp_executesql を使用してテーブルを作成しようとしていますが、「'@_TableName' 付近の構文が正しくありません。ここで何が間違っているのか分かりますか?」というエラーが表示され続けます。

私が使用しているコードは次のとおりです。

DECLARE @SQLString NVARCHAR(MAX), 
        @ParamDefinition NVARCHAR(MAX), 
        @TableName NVARCHAR(MAX);

SET @TableName  = N'[dbo].[MyTable]';

SET @SQLString = N'SELECT * FROM @_TableName;';

SET @ParamDefinition = N'@_TableName NVARCHAR(max)';

EXEC sp_executesql @SQLString, @ParamDefinition, 
                   @_TableName = @TableName;

エラーが発生します:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '@_TableName'.

テーブル名と列の型をハードコーディングすると (両方を行う必要があります)、クエリは機能します。

ご参考までに、このコードをストアド プロシージャ内に配置して、誰かがテーブルを作成または変更したい場合に、追加の検証を実行できるこのストアド プロシージャを呼び出すようにします。

4

1 に答える 1

0

問題を理解しました。

どうやら sp_executesql は、テーブルのパラメーター定義がテーブル型であることを期待しています (例については、この回答を参照してください: https://stackoverflow.com/a/4264553/21539 )。

この問題を解決する簡単な方法は、変数名を次のように SQLStatement 文字列に直接挿入することでした。

DECLARE @SQLString NVARCHAR(MAX), 
        @TableName NVARCHAR(MAX);

SET @TableName  = N'[dbo].[MyTable]';

SET @SQLString = N'SELECT * FROM ' + @TableName + ';';

SET @ParamDefinition = N'@_TableName NVARCHAR(max);

EXEC sp_executesql @SQLString;
于 2013-11-23T00:20:10.920 に答える