Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在存储过程中使用while循环更新表?_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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

Sql 如何在存储过程中使用while循环更新表?,sql,sql-server,stored-procedures,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// S

我想在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

While(@j您不能在where子句中设置Id,因为Id是整数值,您正在将其与字符串(varchar)连接起来。
因此,首先必须将其转换为(String)varchar,然后才能使用where子句

比如:

Set@q_updateTable='Update'+quotename(@tablename)+'Set'+@columnname+'='''+@fourthcolumn+'',其中ID='+转换(varchar,@tmp_ID)+'' Exec sp_executesql@q_updateTable


您必须使用“convert(varchar,@tmp_ID)”而不是“@tmp_ID”

您不能在where子句中设置ID,因为ID是整数值,您正在将其与字符串(varchar)连接。 因此,首先必须将其转换为(String)varchar,然后才能使用where子句

比如:

Set@q_updateTable='Update'+quotename(@tablename)+'Set'+@columnname+'='''+@fourthcolumn+'',其中ID='+转换(varchar,@tmp_ID)+'' Exec sp_executesql@q_updateTable


您必须使用“convert(varchar,@tmp_ID)”而不是“@tmp_ID”

这些变量中有什么?你能添加它吗?什么是
@tmp\u ID
的数据类型?为什么你想让while循环这样做?@Kannan,因为我必须更新每一行。你对此有更好的想法吗?看看你的其他问题,我也认为这可以用纯基于集合的逻辑来完成。你正在尝试使用过程语言thinki来使用SQLng.此解决方案不会随着数据集的增长而扩展。SQL在集合上工作,并根据条件将转换应用于集合的每个元素。您不能像过程语言那样处理它。您可以,但不应该……花时间学习语言这些变量中有什么?您可以添加它吗?
@tmp\u ID
?为什么要while loop执行此操作?@Kannan,因为我必须更新每一行。你对此有更好的想法吗?看看你的其他问题,我也认为这可以通过纯基于集合的逻辑来完成。你试图使用过程语言思维来使用SQL。此解决方案不会随着数据集的增长而扩展。SQL在集合上工作并应用于Trans根据条件对集合中的每个元素进行sforms。你不能像过程语言那样处理它。你可以,但你不应该……花时间学习语言