我在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 **
答案 0 :(得分:1)
试试这个(在测试服务器上):
DELETE FROM TESTTABLE T1
JOIN INSERTED T2
ON T1.COL1 = T2.COL1
AND T1.COL0 = T2.COL0
答案 1 :(得分: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';