2016-10-26 5 views
0

whileループで動的テーブルを更新したい。ここでストアドプロシージャのwhileループでテーブルを更新するにはどうすればよいですか?

は私のコードです:

While (@j<[email protected]_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 '[email protected]+' = ''' + @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 + ''

私は '+ @ ColumnNameに+' = '' '+ @secondcolumn + ''' '

コードが正しく動作

、としてこのWhere句を変更します。

なぜ私のwhere句にIDを設定できないのですか?私は整数としてID値を取得しています。 エラーは「クエリがエラーで完了しました」です。 ありがとうございます。

+0

のinsted?あなたはそれを追加できますか? – rbr94

+1

'@tmp_ID 'のデータ型とは何ですか? –

+1

なぜこれを行うにはループしたいですか? –

答えて

3

idは整数値で、string(varchar)を連結しているため、where句でidを設定することはできません。 まず、(String)varcharでそれを変換しなければならず、where句を使用することができます。

同様:

設定@q_updateTable = '更新 '+ QUOTENAME(@tablename)+' SET '+ @ ColumnNameに+'= ''' + @fourthcolumn + '' 'ID =どこ' +は、変換(varchar型あなたが使用する必要があり、tmp_ID @)+ '' Execのsp_executesqlを@q_updateTable

"tmp_ID @、varchar型(変換)は、" これらの変数には何が "@tmp_ID"

+0

この解決策がうまくいくならば投票してください。 –

+0

どうしてあなたは間違った理由で編集を拒否しますか? – rbr94

関連する問題