在动态查询中访问SQL中的变量

时间:2014-03-03 18:39:21

标签: sql-server dynamic-sql

我对SQL很新。我想在select语句中动态访问变量。

declare @sql NVARCHAR(MAX)
declare @tableName varchar(100)
set @tableName='xxxx'

set @sql='select * from ' +@tableName+ 
EXEC sys.sp_executesql @sql

但每次执行上述查询时都会收到错误:

Incorrect syntax near the keyword 'EXEC'.

3 个答案:

答案 0 :(得分:1)

declare @sql NVARCHAR(MAX);
declare @tableName NVARCHAR(128);
set @tableName='xxxx';

SET @sql = N'select * from ' + QUOTENAME(@tableName)
EXECUTE sp_executesql @sql

当六角形会话将变量从用户传递到动态sql时,使用QUOTENAME()函数。它可以保护您免受可能的SQL注入攻击。

答案 1 :(得分:0)

@tableName之后你有一个额外的加号 - 删除它:

set @sql='select * from ' +@tableName  /*+ */
EXEC sys.sp_executesql @sql

答案 2 :(得分:0)

@table名称周围有太多加号(+)。 请注意,这种方法对注射攻击很开放。

declare @sql NVARCHAR(MAX)
declare @tableName varchar(100)
set @tableName='xxxx'

set @sql='select * from ' +@tableName
EXEC sys.sp_executesql @sql