SQL Server触发器删除现有行并自行插入

时间:2018-08-26 10:48:14

标签: sql-server triggers

插入新行时,我需要删除现有行。

例如,存在一个现有行,其状态为ready,ID为2478

当插入新行时,假设状态为completed并且ID为2478,触发器将找到匹配的ID 2478并删除行,因为状态为{{1} }。

同时,我还需要删除插入的行(状态为completed的行)

这可以通过触发器完成吗?例如:completed

1 个答案:

答案 0 :(得分:2)

是的,这可以在触发器中完成。每当为该ID插入状态为completed的行时,以下示例都会删除该ID的所有行。

CREATE TABLE dbo.YourTable(
     ID int
    ,Status varchar(10)
        CONSTRAINT PK_YourTable PRIMARY KEY(ID, Status)
);
GO

CREATE TRIGGER TR_YourTable ON dbo.YourTable
FOR INSERT
AS
SET NOCOUNT ON;
DELETE target
FROM dbo.YourTable AS target
JOIN inserted ON inserted.ID = target.ID
WHERE inserted.Status = 'completed';
GO

INSERT INTO dbo.YourTable VALUES(2478,'pending');
SELECT * FROM dbo.YourTable; 
INSERT INTO dbo.YourTable VALUES(2478,'ready');
SELECT * FROM dbo.YourTable; 
INSERT INTO dbo.YourTable VALUES(2478,'completed');
SELECT * FROM dbo.YourTable; 
GO