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

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)

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

Rem*_*anu 6

它只能通过存储过程中的动态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)

  • +1 - 他们真的应该只编写到StackOverflow中,每当输入"Dynamic SQL"时它会自动超链接到该文章... (2认同)