T-SQL变量显示'@tableName'附近的语法不正确

时间:2016-06-12 14:34:09

标签: sql-server tsql

尝试运行此

时显示错误
declare  @tableName VARCHAR(250)

select @tableName='['+SCHEMA_NAME(schema_id)+'].['+name+']'

FROM sys.tables
WHERE '['+SCHEMA_NAME(schema_id)+'].['+name+']'='[Management].[Table_1]'

print @tableName

TRUNCATE table @tableName

'@tableName'附近的语法不正确。

1 个答案:

答案 0 :(得分:4)

这是正确的。您不能使用变量来传递表名。

可以使用动态SQL:

declare @sql nvarchar(max);
set @sql = replace('TRUNCATE table @tableName', '@tableName', @tableName);

exec sp_executesql @sql;

允许SQL语句具有常量的参数,但不允许使用标识符的参数。这不仅是SQL Server的限制,而且是所有(?)数据库的限制。动态sql通常用于此目的。

TSQL sp_executesql