我需要编写一个存储过程,它将根据参数更新到特定列。这将从 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
我需要编写一个存储过程,它将根据参数更新到特定列。这将从 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
Declare @SQL varchar(max)
Set @SQL = 'Update ' + @TableName + ' Set ' + @Col1 + ' = ' + @Col1Val....
Exec (@SQL)
这使您暴露在 SQL 注入中,尽管...
有一种方法可以在没有动态 sql 的情况下做到这一点。为每个符合更新条件的列创建单独的存储过程。然后,在您的主存储过程中,根据收到的参数调用适用的存储过程。
这样做不是一个好习惯,但如果你真的想这样做,你必须使用动态 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
这是一件非常糟糕的事情,因为它会造成安全漏洞。
如果你真的想这样做,可以使用动态 sql 来完成。http://technet.microsoft.com/en-us/library/ms188001.aspx