kat*_*roh 2 sql sql-server stored-procedures
我有一个更新变量列的简单查询.此查询稍后是string.Formatted并传递给SqlCommand(c#)(TableId是SomeTable中的一列):
"UPDATE SomeTable set {0}=@Value where TableId=@TableId"
Run Code Online (Sandbox Code Playgroud)
我需要将此查询转换为存储过程.有可能吗?
它只能通过存储过程中的动态SQL来完成(正如Brad已经回答的那样,当然你会QUOTENAME(@columnName)用来正确地防止SQL注入,并使用sysname参数类型).如果你走这条路,我建议你先阅读动态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;
Run Code Online (Sandbox Code Playgroud)