4

SQL Server にはトリガーの後と代わりにしかないことがわかりました。また、挿入された疑似テーブルの値を変更することは違法です。次に、私の問題が発生します。テーブルに挿入されるデータを確認したい場合、データが制約に違反している場合、これらの値をデフォルト値に変更する必要があります。どうすればよいですか? 挿入後に値を更新するのはどうですか?ただし、テーブルに一意の主キーまたは列がない場合、挿入したばかりの行を見つけて更新するにはどうすればよいですか?

4

1 に答える 1

11

基本的に、INSTEAD OF INSERTトリガーを使用すると、探しているものを実現できます-INSERTED疑似テーブルからデータを読み取り、変更して、テーブルに挿入するだけです

したがって、トリガーは次のようになります。

CREATE TRIGGER YourTrigger ON dbo.YourTable    
INSTEAD OF INSERT
AS
    SET NOCOUNT ON

    -- do the INSERT based on the INSERTED pseudo table, modify data as needed
    INSERT INTO dbo.YourTable(Col1, Col2, ....., ColN)
      SELECT 
          Col1, 2 * Col2, ....., N * ColN
      FROM 
          INSERTED

もちろん、特定の行を無視するなどWHERE、文に句の形式でチェックを追加することもできますSELECT .... FROM INSERTED。可能性は無限大です。

于 2012-05-12T09:45:19.233 に答える