ストアドプロシージャがデータを収集し、必要な結合を実行して結果を一時テーブルに挿入する次の状況があります(例:#Results)
ここで、#Resultsのすべてのレコードを以前に作成したテーブルに挿入しますが、最初に宛先を削除(切り捨て/削除)してから、結果を挿入します。キャッチは、宛先テーブルをクリーンアップしてから、トランザクションに新しい#Resultsを挿入するこのプロセスを配置することです。
私は次のことをしました:
BEGIN TRANSACTION
DELETE FROM PracticeDB.dbo.TransTable
IF @@ERROR <> 0
ROLLBACK TRANSACTION
ELSE
BEGIN
INSERT INTO PracticeDB.dbo.TransTable
(
[R_ID]
,[LASTNAME]
,[FIRSTNAME]
,[DATASOURCE]
,[USER_STATUS]
,[Salary]
,[Neet_Stat]
)
SELECT [R_ID]
,[LASTNAME]
,[FIRSTNAME]
,[DATASOURCE]
,[USER_STATUS]
,[Salary]
,[Neet_Stat]
FROM #RESULT
Select @@TRANCOUNT TransactionCount, @@ERROR ErrorCount
IF @@ERROR <> 0
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
END
しかし、それが適切に機能していないことはわかっており、このような例を見つけるのに苦労していますが、なぜそれが一般的なもののように見えるのかわかりません。この場合、挿入は失敗しますが、ターゲットテーブルは削除されます。
何よりも、この状況または同様のケースでのベストプラクティス(使用するのに最適なものなど)に最適なアプローチを行うためのガイダンスがあれば便利です。前もって感謝します...