Select 触发器

当 CREATE TRIGGER 语句将指定表上的任何查询定义为其触发事件(

SELECT ON table
SELECT ON column-list ON table
)时,生成的触发对象是指定Select 触发器。同一触发器还可以被包含将此作为其基本表的触发列的视图上的查询激活。但是,SELECT 语句不能是视图上 INSTEAD OF 触发器的触发事件。

如果 CREATE TRIGGER 语句在嵌入 Select 触发事件的定义中也包含列列表,并且指定表上后续查询的投影列表不包含任何指定的列,那么该查询不能是此 Select 触发器的触发事件。

警告:

Select 触发器不建议用于审计。不要出于执行应用程序指定审计的目的而在表或其列的子集上尝试创建 Select 触发器。一般情况下,通过创建 Select 触发器来跟踪表上的 Select 动作的数量,以在每次用户查询某个表时将审计记录插入到审计表中是不可能的。

例如,假设您在表 AuditedTable 上定义了 Select 触发器,且对 AuditedTable 持有 Select 特权的用户发出了以下查询:

SELECT a.* FROM (SELECT * FROM AuditedTable) AS a;

数据库服务器不发出错误,但是 AuditedTable 上的 SELECT 触发器不会被此查询激活。包含集合运算符(例如 UNION 或 INTERSECT)的查询,或者其它 Select 触发器不支持的语法,将会被基于 Select 触发器的审计记录策略无视。

因为执行 Select 触发器的大量的限制(部分在本章中列出),生成的 Select 触发操作通常仅对应于试图枚举的任何逻辑 Select 事件的子集(它可能为空)。