0

特別なトリガー テーブルの順序は同じであるinsertedと期待できdeletedますか?

そうでない場合、ID 列に影響を与える挿入ステートメントをどのように処理すればよいですか?

本番 (メイン) データベースがあります。本番データベースの最上位層である開発データベースをセットアップしようとしています。開発データベースでは、アプリケーションが変更しないテーブルとビューは、運用データベースと同義です。変更するテーブルのビューを設定しています。これらのビューが更新または挿入されると、データは本番データベース テーブルではなく、セカンダリ テーブルに挿入されます。ビューは、セカンダリ テーブルからすべての行を選択し、次に、セカンダリ テーブルに存在しない運用テーブルの行を選択します (比較は主キー列で行われます)。

私のプロダクション テーブルの 1 つが で、MainDB.App.Dataセカンダリ テーブルがMockDB.MockTables.Dataで、ビューが であるとしますMockDB.App.Data。モック テーブルを更新または挿入するビューにトリガーがあります。

USE MockDB

CREATE TRIGGER App.DataTrigger
ON App.Data INSTEAD OF INSERT, UPDATE
NOT FOR REPLICATION AS
BEGIN
    SET NOCOUNT ON

    -- try updating
    UPDATE T1
    SET <all T1 columns to TI columns>
    FROM MockDB.MockTables.Data T1
    INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY @@ROWCOUNT) as # FROM deleted) TD
        ON T1.Identity = TD.NotificationID
    INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY @@ROWCOUNT) as # FROM inserted) TI
        ON TD.# = TI.#

    -- see if the update did something
    IF @@ROWCOUNT > 0
    BEGIN
        RETURN
    END

    -- insert rows that don't already exist in the mock table

    SET IDENTITY_INSERT MockDB.MockTables.Data ON

    INSERT INTO MockDB.MockTables.Data (<all columns>)
    SELECT * FROM inserted

    SET NOCOUNT OFF
    SET IDENTITY_INSERT MockDB.MockTables.Data OFF
END
4

0 に答える 0