我需要编写一个存储过程,它将根据参数更新到特定列。这将从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
答案 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