1

ストアドプロシージャのビルド更新クエリがあり、ループするたびに一時テーブルに格納します。

構築されたクエリの総数不明(2から4)

マルチクエリをトランザクションに入れるにはどうすればよいですか?

たとえば、一時テーブルの列EXPSQLnvarchar)には次の行が含まれます

id   EXPSQL
1    Update tableA SET Name = 'Test' WHERE id=1
2    Update tableB SET Name = 'Test2' WHERE id=10

上記のクエリを実行するためのループのトランザクションを開始するにはどうすればよいですか?または他の方法はありますか?

while @id < total
begin
    set @id = @id +1
    select @SQL = EXPSQL FROM #TEMPTABLE WHERE id=@id
    EXEC (@SQL)
end

ありがとう

4

1 に答える 1

0

すべてを1つとして実行する場合:

begin transaction

while @id < total
begin
    set @id = @id +1
    select @SQL = EXPSQL FROM #TEMPTABLE WHERE id=@id
    EXEC (@SQL)

    -- if a error occurs go back to the original state
    if(@@error <> 0)
       rollback transaction
end

commit transaction

それぞれを個別に実行する場合:

while @id < total
begin
    set @id = @id +1
    select @SQL = EXPSQL FROM #TEMPTABLE WHERE id=@id

    begin transaction
    EXEC (@SQL)

    -- if a error occurs go back to the original state
    if(@@error <> 0)
       rollback transaction
    else
       commit transaction
end
于 2012-08-24T09:56:16.200 に答える