0

我已经在 Stack 上阅读了一些问题/答案,但找不到任何我需要的东西。
假设我有下表:

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

问题是如果插入尝试添加具有相同 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 回答