如何在存储过程中使用while循环更新表?

时间:2016-10-26 10:11:56

标签: sql sql-server stored-procedures

我想在while循环中更新动态表。

这是我的代码:

While (@j<=@tmp_getRowCount)
Begin

Set @firstcolumn = (Select SplitFirst_tblAR from @result_AR Where rownumber = @j) //String//
Set @secondcolumn = (Select EMail_tblAR from @result_AR Where rownumber = @j)  //String//
Set @thirdcolumn = (Select SplitFirst_tblKul from @result_AR Where rownumber = @j)  //String//
Set @fourthcolumn = (Select EMail_tblKul from @result_AR Where rownumber = @j)  //String//

insert into @test Values(@tmp_ID, @firstcolumn,@secondcolumn,@thirdcolumn,@fourthcolumn)

if ((@firstcolumn = @thirdcolumn) AND (@secondcolumn != @fourthcolumn) AND (@firstcolumn != ''))
begin

Set @q_updateTable = 'Update '+ quotename(@tablename) +' Set '+@columnname+' = ''' + @fourthcolumn + ''' Where ID = ' + @tmp_ID + ''
Exec sp_executesql @q_updateTable

end

SET @j = @j+1
End

我的result_AR表:

enter image description here

我知道错误在这里:

  

ID ='+ @tmp_ID +''

当我将此Where子句更改为

  

'+ @ columnname +'='''+ @secondcolumn +''''

代码正常工作。

为什么我不能将ID设置为where where子句?我得到ID值为整数。 错误是“查询已完成但有错误”。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

你不能在where子句中设置Id,因为id是整数值,你用string(varchar)连接它。 首先,你必须在(String)varchar中转换它,你可以使用where子句。

喜欢:

设置@q_updateTable ='更新'+'allame(@tablename)+'设置'+ @ columnname +'='''+ @fourthcolumn +'''其中ID ='+ convert(varchar,@ tmp_ID)+'' exec sp_executesql @q_updateTable

你必须使用“@tmp_ID”的“convert(varchar,@ tmp_ID)”