sql - 是否可以更新存储过程中的变量字段?

标签 sql sql-server stored-procedures

我有一个更新变量列的简单查询。此查询稍后被 string.Formatted 并传递给 SqlCommand (c#)(TableId 是 SomeTable 中的一列):

"UPDATE SomeTable set {0}=@Value where TableId=@TableId"

我需要将此查询转换为存储过程。有可能吗?

最佳答案

它只能通过存储过程中的动态 SQL 来完成(正如 Brad 已经回答的那样,但当然你会使用 QUOTENAME(@columnName) 来正确防止 SQL 注入(inject),并使用 sysname参数类型)。如果你走那条路,我建议你先阅读 The Curse and Blessings of Dynamic SQL .

更新:

我不得不发布代码,因为 Brad 的代码错误太多。

create procedure myCustomUpdate
   @columnName sysname,
   @value sql_variant,
   @id int
AS
declare @sql NVARCHAR(max);
set @sql = N'UPDATE SomeTable SET ' + QUOTENAME(@columnName) 
    + N' = @value WHERE TableId = @id';
exec sp_executesql @sql, N'@value sql_variant, @id int', @value, @id;

关于sql - 是否可以更新存储过程中的变量字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990929/

相关文章:

c# - smallint转int的datarow字段扩展方法

stored-procedures - 在 Sybase ASE 15.0 中处理从一个存储过程到另一个存储过程的错误

mysql - 按受监管员工数量分组 SELECT 查询

Ruby on Rails 教程中的 SQL 插值

mysql - MYSQL建表语句错误1064(42000)

sql-server - TSQL 转换 XML 中的字符

sql - T-SQL 参数

C# 从存储过程中获取返回值不起作用

sql - 如何在存储过程中使用局部变量?

php - 当我插入从CSV文件获取的数据时,如何防止MYSQL表中出现重复记录