如何在存储过程中动态指定列

时间:2013-08-26 18:12:14

标签: sql stored-procedures

我需要编写一个存储过程,它将根据参数更新到特定列。这将从C#app调用。

要更新的表格如下:

表A:Id,Col1,Col2,Col3。

这样的事情:

Create Procedure UpdateByCol
 @col_num int,
 @value string,
 @id int
as
Begin
    Update TableA Set *How do I specify the column here* = @value where Id = @id
End

4 个答案:

答案 0 :(得分:4)

Declare @SQL varchar(max)

Set @SQL = 'Update ' + @TableName + ' Set ' + @Col1 + ' = ' + @Col1Val....

Exec (@SQL)

这会让你暴露于SQL注入......

答案 1 :(得分:1)

有一种方法可以在没有动态sql的情况下执行此操作。为每个有资格更新的列创建单独的存储过程。然后,在主存储过程中,根据收到的参数调用适用的存储过程。

答案 2 :(得分:0)

执行此操作并不是一个好习惯,但如果您真的想要使用动态sql来创建字符串并执行它,请执行此操作:

Create Procedure UpdateByCol
 @col_num int,
 @value string,
 @id int
as
Begin
    declare @str varchar(2000)
    set @str = 'Update TableA Set Col' + convert(varchar,@col) + ' = ''' + @value + ''' where Id = ' + convert(varchar, @id )

    exec ( @str )
End

这是一个非常糟糕的事情,因为它会造成安全漏洞。

答案 3 :(得分:0)

如果你真的想这样做,可以使用动态sql完成。 http://technet.microsoft.com/en-us/library/ms188001.aspx