sql server触发器

Nan*_*nda 6 sql t-sql sql-server triggers

我有这样的表结构:

create table status_master
(
  Name varchar(40)
  status varchar(10)
)
Run Code Online (Sandbox Code Playgroud)

我需要为状态列创建触发器,如果​​状态列值更新值为FAIL,则触发器调用一个插入commant,如:

insert into temp value('s',s's')
Run Code Online (Sandbox Code Playgroud)

你能不能请任何人给我解决这个问题的想法?

mar*_*c_s 6

不确定你真正想要实现的目标 - 但在SQL Server中,你有两种类型的触发器:

  • 在INSERT,UPDATE,DELETE 之后触发AFTER触发
  • INSTEAD OF触发器可以捕获操作(INSERT,UPDATE,DELETE)并执行某些操作

SQL Server没有其他RDBMS具有的BEFORE INSERT/UPDATE/DELETE触发器.

您可以拥有任意数量的AFTER触发器,但每个操作只有一个INSTEAD OF触发器(INSERT,UPDATE,DELETE).

更常见的情况是AFTER触发器,例如:

CREATE TRIGGER trgCheckInsertedValues
ON status_master
AFTER INSERT
AS
BEGIN
  INSERT INTO dbo.temp(field1, field2, field3)
     SELECT i.Name, i.Status
     FROM inserted i
     WHERE i.Status = 'FAIL'
END
Run Code Online (Sandbox Code Playgroud)

在这里,我正在检查"inserted"伪表,其中包含插入表中的所有行,对于包含"status = FAIL"的每一行,您将在"temp"表中插入一些字段.

再一次 - 不确定你真正想要的细节 - 但这将是如何在SQL Server T-SQL代码中做到这一点的粗略概述.


Age*_*191 0

您正在寻找的是一个 INSTEAD OF INSERT、UPDATE 触发器。在触发器中,您尝试在 try-catch 中插入或更新自己。如果出错,则将这些值插入到其他表中(假设它是某种日志记录表)。