logo

Gavin Lee

春节

SQL Server触发器学习笔记

2021-02-24 Views SQL Server | 数据库712字3 min read
featureimg

触发器类型

SQL Server中有两种类型的触发器:AFTER触发器和INSTEAD OF触发器。AFTER触发器是在执行DML语句(INSERT、UPDATE或DELETE)后触发的,而INSTEAD OF触发器是在执行DML语句之前触发的。如果使用INSTEAD OF触发器,可以在执行DML语句之前修改或替换数据。
触发器事件
触发器可以在INSERT、UPDATE或DELETE语句执行之后自动执行。在定义触发器时,可以指定要监视的事件类型。例如,在定义触发器时,可以指定它应该在INSERT语句执行之后触发,如下所示:

CREATE TRIGGER tr_example
ON example_table
AFTER INSERT
AS
BEGIN
-- 触发器主体
END

在这个例子中,触发器将在example_table表中执行INSERT语句之后触发。

触发器主体

触发器主体是触发器中实际执行的代码。可以在触发器主体中使用任何有效的T-SQL语句,包括INSERT、UPDATE、DELETE、SELECT以及条件和循环结构。
在触发器主体中,可以使用两个特殊的表:inserted和deleted。这些表包含由DML语句插入、更新或删除的行的副本。插入的行存储在inserted表中,而删除的行存储在deleted表中。如果在UPDATE语句中修改了行,则旧行存储在deleted表中,而新行存储在inserted表中。
下面是一个示例触发器,当在example_table表中执行INSERT语句时,它将向example_log表中插入一条日志记录:

CREATE TRIGGER tr_example_insert
ON example_table
AFTER INSERT
AS
BEGIN
  INSERT INTO example_log (log_date, message)
  SELECT GETDATE(), 'New row inserted into example_table.'
  FROM inserted;
END

在这个触发器中,我们使用了inserted表来检索刚刚插入的行,并将日志记录插入到example_log表中。

触发器的优点和缺点

触发器的优点是它们可以自动执行某些操作,从而简化了应用程序中的代码。触发器还可以在数据库层面上实施业务规则,从而确保数据的完整性和一致性。
触发器的缺点是它们可能会导致性能问题。如果触发器包含复杂的逻辑或在大型表上执行,可能会对数据库的性能产生负面影响。此外,触发器可能会使代码难以维护,因为它们在数据库层面上执行操作,而不是在应用程序代码中执行。

总结

SQL Server触发器是一种强大的工具,可以在表发生变化时自动执行一些操作。在定义触发器时,可以指定要监视的事件类型和触发器主体中要执行的代码。触发器的优点是可以自动执行操作和实施业务规则,但它们可能会导致性能问题和代码维护难度。

EOF