我对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'.
答案 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