0
私はcrmとerpを同期させています。私は、毎回約20のテーブルに、15分ごとに挿入するために、私たちのcrmから数百のレコードをバッチします。ある時刻に1つのレコードを挿入し、20個のテーブルのいずれかで挿入が失敗し、そのレコードの挿入を取り消した場合は、エラーを記録します。一度に1つのレコードをカーソルまたはループで挿入する方法を見ることができます。一度に1つのレコードを挿入し、トランザクションを使用してエラーを記録するにはどうすればよいですか?レコードのバッチの挿入、多くの挿入クエリー、各レコードのロギングにカーソル、ループ、トランザクションの方が適している
--transaction方法 --BEGIN TRANS
カーソル方式の--partialコードリスト、それが動作している
declare @cur cursor;
declare @x nvarchar(9);
begin
set @cur = cursor for
select people_id from powercampustest.dbo.PeopleChanges where (processed is null)
open @cur
fetch next from @cur
into @x
while @@FETCH_STATUS = 0
begin
/* add the rest here */
begin try
--20 insert queries
end try
begin catch
--transaction method
--ROLLBACK
print 'Error on people id ' + @x
--cursor method
--if one insert fails delete all inserted
--do we want error out on first fail, or try all and report if each failed or not
--TableListForDelete, list of tables for delete
--write error in log table
end catch
fetch next from @cur
into @x
end;
close @cur;
deallocate @cur;
end;
===========================================================
--partial code list of while method
select @loop = @@rowcount
if @loop <= 0 Return
Set @PersonId = 0
Select @PersonId =
(Select Min([PersonId]) From inserted Where [PersonId] > @PersonId)
While @PersonId Is Not Null
begin
SELECT ...
--Get Next Id
Select @PersonId =
(Select Min([PersonId]) From inserted Where [PersonId] > @PersonId)
END
if @@error <> 0
begin
raiserror(1944115471, 16, 65, @MessageType) with nowait;
rollback tran;
end
end
すべてのエラーが表示されるように、各インサートを試してみたいです。一度に1つのエラーを発見するのに時間がかかります。また、私はカーソルを使って、デバッガで何が起こっているのかを確認することができます。それをトランザクションで見る方法はありますか? – ERPISE