【发布时间】:2015-01-08 22:50:27
【问题描述】:
DECLARE @sql NVARCHAR(max)
DECLARE @ParmDefinition NVARCHAR(500)
SET @sql = 'UPDATE [Table1] SET [Table1].[@columnName] = TEST';
SET @ParmDefinition = N'@columnName NVARCHAR(50)';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'MyColumn';
当我运行上述查询时,我得到Invalid column name '@columnName'.。显然,运行查询时列名没有被替换。
实际上,我的@sql 变量要大得多,而且我有很多列要更新,因此我想避免对列名的所有枚举执行SET SQL =。
我想声明一次 sql 字符串,然后用不同的值调用查询。例如:
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'MyColumn';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'AnotherColumn';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'YetAnotherColumn';
-- And so on
这样的事情可能吗?
【问题讨论】: