我有一个更新变量列的简单查询。此查询稍后被 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/