特定数据上的SQL Server触发器

特定数据上的SQL Server触发器,sql,sql-server,triggers,Sql,Sql Server,Triggers,下午好 我正在处理一个大型数据库,他们特别要求我在数据库中实现触发器 基本上,我们有一组表,所有表都包含不同的信息,但是如果在一个特定的表中,在“fieldID”列中输入了一定范围的值,我需要它来触发 在这种情况下,如果用户以最简单的形式插入数据,fieldID>=4,fieldID,您可以编写一个INSTEAD OF INSERT触发器来实现您正在尝试的功能。像下面这样 CREATE TRIGGER trg_testoninsert on myTestTable INSTEAD OF INSE

下午好

我正在处理一个大型数据库,他们特别要求我在数据库中实现触发器

基本上,我们有一组表,所有表都包含不同的信息,但是如果在一个特定的表中,在“fieldID”列中输入了一定范围的值,我需要它来触发


在这种情况下,如果用户以最简单的形式插入数据,fieldID>=4,fieldID,您可以编写一个INSTEAD OF INSERT触发器来实现您正在尝试的功能。像下面这样

CREATE TRIGGER trg_testoninsert on myTestTable
INSTEAD OF INSERT
AS
BEGIN
IF inserted.fieldID >= 4 AND inserted.fieldID <=9

INSERT INTO myFieldTable(state, process, fieldID) 
select state, process, fieldID
from inserted;
END;
GO

谢谢“但它是如何引用插入的?”WillWhitehead,好问题;为什么不使用MSDN文档阅读和理解相同的内容@WillWhitehead,inserted是一个中间表,所以在数据进入实际表之前,数据将首先被插入到该表中。您可以直接引用此表中的数据,并对其执行一些验证/操作。我刚刚阅读了techNet的所有内容-我现在完全理解了它,您的示例确实帮助我们解决了触发器不起作用的问题。您正在检查第一行的值,并将inserted的全部内容发送到辅助表。您根本不需要插入到主表中。您不需要if语句。只有两条insert语句,一条到主语句,另一条到辅助语句。插入myFieldTablestate,process,fieldID选择状态,process,fieldID,其中fieldID介于4和9之间;并在myTestTablestate、process、fieldID中插入选择状态、流程、fieldID,其中fieldID<4或fieldID>9;就这样。没什么特别的。
CREATE TRIGGER trg_testoninsert on myTestTable
INSTEAD OF INSERT
AS
BEGIN
IF inserted.fieldID >= 4 AND inserted.fieldID <=9

INSERT INTO myFieldTable(state, process, fieldID) 
select state, process, fieldID
from inserted;
END;
GO