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创建了一个存储过程,并进行了处理。