私は悪質なWTF sprocを引き継いで、アウトバウンドマーケティング電子メールのテーブルに300k行を挿入します。私たちは、バウンスしている電子メールアドレスにメッセージをキューイングしません。私たちは電子メールをバウンスする別のテーブルを持っています。トランザクション内に挿入した後に削除
正しい方法は、電子メールをバウンスするために行を挿入しないようにsprocを変更することです。
この特定のsprocである悪夢のクラスターファックに触れる人は誰もいません。私たちはsprocに削除コマンドを追加することを検討しています。
BEGIN TRANSACTION
--400+ lines of nightmarish WTF T-SQL, string and XML replacement nonsense goes here--
DELETE FROM EmailQueueItems
WHERE ToAddress IN
(SELECT EmailStatuses.Email FROM EmailStatuses
INNER JOIN EmailEventTypes on EmailEventTypes.EmailEventTypeId = EmailStatuses.EmailEventTypeId
WHERE EmailEventTypes.CanSendMarketing = 0)
COMMIT TRANSACTION
だからこの仕事はできますか?トランザクションがコミットする前にテーブルから挿入を削除できますか?
質問が沸騰する可能性がある場合:トランザクション内で同じレコードを挿入したり削除したりすることはできますか? –
ええ、でも、もし私がそれを聞いたら、人々は「はい」と言っているかもしれませんが、あなたのコードを良くして、そうする必要はありません。 –
これは試してみると簡単に答えることができます。 –