我有以下代码:
UPDATE myTable
SET Col1 = @Value
但是,我有一个超过100列的表,并希望能够通过将名称传递给查询来指定列名,类似于:
UPDATE myTable
SET @ColName = @Value
当我这样做时,我收到一个错误。有一个很好的解决方案吗?它可能很简单!
先谢谢你。
答案 0 :(得分:6)
你必须使用动态SQL,并编写它以确保你不允许Little Bobby Tables进入。像这样:
DECLARE @sql NVARCHAR(500)
SET @sql = N'UPDATE myTable SET ' + QUOTENAME(@colName) + ' = @pUpdateVal'
EXEC sp_ExecuteSQL @sql, '@pUpdateVal NVARCHAR(20)', @value
确保将@pUpdateVal的类型更改为适合您环境的内容,但这样可以降低注入攻击的风险。
答案 1 :(得分:2)
您必须恢复到动态SQL才能执行此操作。
答案 2 :(得分:1)
与其他人一致,你需要动态SQL;您无法在本机SQL中的运行时定义对象名称。有关动态SQL的完整讨论,请参阅http://www.sommarskog.se/dynamic_sql.html