Sql server SQL Server触发器删除现有行并插入自身
插入新行时,我需要删除现有行 例如,现有行的状态为Sql server SQL Server触发器删除现有行并插入自身,sql-server,triggers,Sql Server,Triggers,插入新行时,我需要删除现有行 例如,现有行的状态为ready,ID为2478 插入新行时,假设状态为completed,ID为2478,触发器将找到匹配的ID2478,并删除该行,因为状态为completed 同时,我还需要删除插入的行(状态为completed) 这可以用触发器来完成吗?例如:插入后是的,这可以在触发器中完成。下面的示例在为给定ID插入状态为completed的行时删除该ID的所有行 CREATE TABLE dbo.YourTable( ID int ,St
ready
,ID为2478
插入新行时,假设状态为completed
,ID为2478
,触发器将找到匹配的ID2478
,并删除该行,因为状态为completed
同时,我还需要删除插入的行(状态为completed
)
这可以用触发器来完成吗?例如:
插入后
是的,这可以在触发器中完成。下面的示例在为给定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
是的,这可以在触发器中完成。下面的示例在为给定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
根据您的回答,表格将是空的,对吗?是的,表格将以我的答案中的样本数据结束。如果为其他ID和未完成状态插入行,则不会删除这些行。根据您的回答,该表将为空,对吗?是的,该表最终将为空,并且我的回答中包含示例数据。如果为其他ID和未完成状态插入行,则不会删除这些ID。