我有这样的一个表结构:
create table status_master
(
Name varchar(40)
status varchar(10)
)
我需要为状态列创建触发器,如果状态列的值更新为FAIL,则触发器会调用一个插入命令,如下所示:
insert into temp value('s',s's')
请问有人能给我解决这个问题的思路吗?
我有这样的一个表结构:
create table status_master
(
Name varchar(40)
status varchar(10)
)
我需要为状态列创建触发器,如果状态列的值更新为FAIL,则触发器会调用一个插入命令,如下所示:
insert into temp value('s',s's')
请问有人能给我解决这个问题的思路吗?
不确定你真正想要实现什么目标 - 但在SQL Server中,你有两种类型的触发器:
SQL Server没有其他RDBMS拥有的 BEFORE INSERT/UPDATE/DELETE 触发器。
你可以拥有任意数量的 AFTER 触发器,但每个操作(INSERT、UPDATE、DELETE)只能拥有一个 INSTEAD OF 触发器。
更常见的情况是 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
在这里,我正在检查“inserted”伪表,该表包含插入到您的表中的所有行,并且对于每一行中包含“status = FAIL”的行,您将向“temp”表插入一些字段。
再次强调 - 不确定您需要什么具体内容 - 但这是使用 SQL Server T-SQL 代码实现的大致轮廓。
Marc
在SQL中,触发器用于在特定表中执行任何操作(如插入、删除、更新)时触发查询。
http://allinworld99.blogspot.com/2015/04/triggers-in-sql.html
假设你的意思是,状态的新值是FAIL,那么这样怎样:
触发器使用“inserted”引用新记录行,使用“deleted”引用旧记录行
CREATE TRIGGER trgCheckInsertedValues ON status_master AFTER INSERT AS
BEGIN
如果插入的status为“FAIL”,则插入到dbo.temp(field1,field2,field3)
SELECT i.Name,i.Status,“anything” FROM inserted i