SQL更新将列名和值传递到查询中的列

SQL更新将列名和值传递到查询中的列,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我有以下代码: UPDATE myTable SET Col1 = @Value 但是,我有一个超过100列的表,希望能够通过将名称传递到查询中来指定列名,类似于: UPDATE myTable SET @ColName = @Value 当我这样做时,我会得到一个错误。有好的解决办法吗?这可能很简单 感谢您的高级支持。您必须恢复到动态SQL才能执行此操作。您必须恢复到动态SQL才能执行此操作。您必须使用动态SQL,并编写它以确保不会让人进入。大概是这样的: DECLARE @s

我有以下代码:

UPDATE myTable
SET    Col1 = @Value
但是,我有一个超过100列的表,希望能够通过将名称传递到查询中来指定列名,类似于:

UPDATE myTable
SET    @ColName = @Value
当我这样做时,我会得到一个错误。有好的解决办法吗?这可能很简单


感谢您的高级支持。

您必须恢复到动态SQL才能执行此操作。

您必须恢复到动态SQL才能执行此操作。

您必须使用动态SQL,并编写它以确保不会让人进入。大概是这样的:

DECLARE @sql NVARCHAR(500)
SET @sql = N'UPDATE myTable SET ' + QUOTENAME(@colName) + ' = @pUpdateVal'
EXEC sp_ExecuteSQL @sql, '@pUpdateVal NVARCHAR(20)', @value

请确保将@pUpdateVal的类型更改为适合您的环境的类型,但这将降低注入攻击的风险。

您必须使用动态SQL,并编写它以确保不让其进入。大概是这样的:

DECLARE @sql NVARCHAR(500)
SET @sql = N'UPDATE myTable SET ' + QUOTENAME(@colName) + ' = @pUpdateVal'
EXEC sp_ExecuteSQL @sql, '@pUpdateVal NVARCHAR(20)', @value

确保您将@pUpdateVal的类型更改为适合您的环境的类型,但这将降低注入攻击的风险。

与其他人一致,您需要使用动态SQL;在本机SQL中,无法在运行时定义对象名称。有关动态SQL的完整讨论,请参见

同意其他人的意见,您需要使用动态SQL;在本机SQL中,无法在运行时定义对象名称。有关动态SQL的完整讨论,请参见

是否应该只更新我的表?@CodeByMoonlight。。。是:-)修正。谢谢大家的评论和回答。我使用动态SQL创建了一个存储过程并进行了处理。它不应该只是更新myTable吗?@CodeByMoonlight。。。是:-)修正。谢谢大家的评论和回答。我使用动态SQL创建了一个存储过程,并进行了处理。