3

同じスキーマを持つ多数のデータベースがあり、それぞれが中央データベース内の別のテーブルとレコードを同期するためのトリガーを持つテーブルを持っています。テーブルが更新、挿入、または削除されると、中央データベースのテーブルにもレコードが更新、挿入、または削除されます。

中央データベースのテーブルから不思議なことにレコードが消えています。問題を調査したところ、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)
4

1 に答える 1