SQL Update列将查询列名称和值传递给查询

时间:2009-10-27 12:22:43

标签: sql sql-server-2005 tsql

我有以下代码:

UPDATE myTable
SET    Col1 = @Value

但是,我有一个超过100列的表,并希望能够通过将名称传递给查询来指定列名,类似于:

UPDATE myTable
SET    @ColName = @Value

当我这样做时,我收到一个错误。有一个很好的解决方案吗?它可能很简单!

先谢谢你。

3 个答案:

答案 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