同じスキーマを持つ多数のデータベースがあり、それぞれが中央データベース内の別のテーブルとレコードを同期するためのトリガーを持つテーブルを持っています。テーブルが更新、挿入、または削除されると、中央データベースのテーブルにもレコードが更新、挿入、または削除されます。
中央データベースのテーブルから不思議なことにレコードが消えています。問題を調査したところ、insert/delete トリガーが起動したときにdeleted
、現在の delete ステートメントからのものではないレコードがテーブルにあることがわかりました。それらは同じデータベース内のレコードでさえありません。それらは、別のデータベースの同じテーブルの更新ステートメントの古い値レコードのように見えます。
私が見つけたすべての情報は、deleted
テーブル内のレコードは、トリガーを起動させたステートメントからのものでなければならないと言っています。
代わりにこの動作が見られる理由を誰かが説明できますか?
編集:これは挿入/削除トリガーがどのように見えるかです:
DECLARE @TenantID INT
SELECT @TenantID = ID FROM [CentralDB]..Tenants WHERE db = DB_Name()
INSERT INTO [CentralDB].[dbo].[TenantUsers]
(..snipped list of columns...)
SELECT
...snipped list of columns...
FROM inserted
WHERE UserNameID NOT IN (0,6)
DELETE FROM [CentralDB]..TenantUsers WHERE UserNameID in
(SELECT UserNameID FROM DELETED WHERE UserNameID NOT IN (0,1,6))
そして更新トリガー:
DECLARE @TenantID INT
SELECT @TenantID = ID FROM [CentralDB]..Tenants WHERE db = DB_Name()
UPDATE [CentralDB].[dbo].[TenantUsers]
SET ...snipped list of columns...
FROM INSERTED i
WHERE i.UserNameID = TenantUsers.UserNameID
AND i.UserNameID NOT IN (0,6)