0

TABLE Bに更新がある場合にレコードを挿入する方法はありTABLE Aますか?

トリガーを使用したくありません。


答えはOUTPUT、トリガーの代わりに節を使用できることです。

USE AdventureWorks2012;
GO
IF OBJECT_ID('dbo.vw_ScrapReason','V') IS NOT NULL
    DROP VIEW dbo.vw_ScrapReason;
GO
CREATE VIEW dbo.vw_ScrapReason
AS (SELECT ScrapReasonID, Name, ModifiedDate
    FROM Production.ScrapReason);
GO
CREATE TRIGGER dbo.io_ScrapReason 
    ON dbo.vw_ScrapReason
INSTEAD OF INSERT
AS
BEGIN
--ScrapReasonID is not specified in the list of columns to be inserted 
--because it is an IDENTITY column.
    INSERT INTO Production.ScrapReason (Name, ModifiedDate)
        OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, 
               INSERTED.ModifiedDate
    SELECT Name, getdate()
    FROM inserted;
END
GO
INSERT vw_ScrapReason (ScrapReasonID, Name, ModifiedDate)
VALUES (99, N'My scrap reason','20030404');
GO
4

3 に答える 3

2

トリガーを使用したくない場合は、3 つのオプションがあります。

1 つ目は、すべての挿入/更新/削除をストアド プロシージャにラップすることです。次に、これらのストアド プロシージャのみを使用してデータを変更します。これは、実際に私が一般的に取っているアプローチです。

もう 1 つの方法は、データへの変更を定期的に検索するプロセスを実行することです。これは、更新のために実際に行うのは難しいです。デフォルトの作成日で列を追加できるため、挿入は非常に簡単で、最近追加されたものを簡単に見つけることができます。

3 つ目の方法は、SQL Server Change Tracking を使用することです (こちらを参照)。

于 2013-08-20T14:34:49.007 に答える