2
我正在尝试使用sp_executesql创建表,但我不断收到一个错误消息,提示“附近的'@_TableName'语法不正确,有任何想法我在这里做错了吗?如何使用sp_executesql传递表变量
下面是我使用的代码:
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'.
如果我硬编码表名和字段类型(我必须做两),那么查询起作用,否则我得到了这些变量的不正确语法消息。
如果你想知道,我希望把这个代码存储过程中,因此,如果有人要,然后创建或修改表它们调用的可运行额外的验证此存储过程。
很不幸,这会让你容易受到SQL注入攻击,如果@tablename从用户输入的到来。这个答案解释了如何解决这个问题:http://stackoverflow.com/a/1246848/109122 – RBarryYoung