Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server触发器删除现有行并插入自身_Sql Server_Triggers - Fatal编程技术网

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
,触发器将找到匹配的ID
2478
,并删除该行,因为状态为
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。