0

ここスタックでいくつかの質問/回答を読みましたが、必要なものが見つかりませんでした。
次のテーブルがあるとします。

col0  col1  col2  col3  col4
----  ----  ----  ----  ----
8     1     a     b     c
8     2     a     b     c
8     3     a     b     c
9     1     a     b     c
9     2     a     b     c

そして私のソフトウェアは:

INSERT INTO testtable ([col0],[col1],[col2],[col3],[col4]) 
  VALUES ('8','4','a','b','c')

この擬似コードのようなトリガーを作成するにはどうすればよいですか:

On insert when col1 = '4'
  delete existing rows where col0 is the same (8 in this case)
   ** except for the new row I've just added **
4

2 に答える 2

1

これを(テストサーバーで)試してください:

DELETE FROM TESTTABLE T1
    JOIN INSERTED T2
        ON T1.COL1 = T2.COL1
        AND T1.COL0 = T2.COL0
于 2012-07-02T21:33:40.573 に答える
1

トリガーの代わりにこれを実行する方が適切に思えます。目標が私が想定するものである場合: col0 = 8 で新しい行が挿入されると、同じキーを持つ他のすべての行を削除したいですか?

CREATE TRIGGER dbo.testtable_instead_insert
ON dbo.testtable
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;

  DELETE t 
    FROM dbo.testtable AS t
    INNER JOIN inserted AS i
    ON t.col0 = i.col0
    WHERE i.col1 = '4';

  INSERT dbo.testtable(col0,col1,col2,col3,col4)
    SELECT col0,col1,col2,col3,col4
      FROM inserted;
END
GO

問題は、insert が同じ col0 値を持つ複数の行を追加しようとした場合、どのような規則に従うべきかということです。挿入ステートメントが次のようになっていると想像してください。

INSERT dbo.testtable ([col0],[col1],[col2],[col3],[col4]) 
SELECT '8','4','a','b','c'
UNION ALL 
SELECT '8','3','c','d','e';
于 2012-07-02T21:40:37.960 に答える