1

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

要更新的表是这样的:

表 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

4 回答 4

4
Declare @SQL varchar(max)

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

Exec (@SQL)

这使您暴露在 SQL 注入中,尽管...

于 2013-08-26T18:14:22.593 回答
1

有一种方法可以在没有动态 sql 的情况下做到这一点。为每个符合更新条件的列创建单独的存储过程。然后,在您的主存储过程中,根据收到的参数调用适用的存储过程。

于 2013-08-26T18:25:12.070 回答
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

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

于 2013-08-26T18:15:39.930 回答
0

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

于 2013-08-26T18:15:58.263 回答