SQL Server 触发器实例详解

SQL Server 触发器实例详解

什么是SQL Server触发器?

SQL Server 触发器是一段特殊的代码,可以自动地在特定情况下执行。当执行到 SQL Server 数据库上的特定动作时,触发器将会被激活,并执行预定义好的代码。触发器通常被用来在数据库发生变化时执行额外的自定义代码。

SQL Server 触发器的分类

SQL Server 触发器总共分为两种类型:

  • 行级触发器:是在数据的每一行被插入、更新或删除时,都会自动运行一次的触发器。
  • 语句级触发器:是在 SQL 数据库上的某个特定语句运行时立即自动运行的触发器。

SQL Server 触发器的语法

CREATE TRIGGER trigger_name 
{ AFTER | INSTEAD OF } {update,delete,insert} 
ON {table_name} 
[REFERENCING [{OLD | NEW} AS alias_name}]
[FOR EACH {ROW | STATEMENT}]
[WHEN (logical_expression)]
{sql_statement}

具体来说,该语法有以下几个重要的部分。

  • CREATE TRIGGER:触发器的创建命令。
  • trigger_name:触发器的名字。
  • { AFTER | INSTEAD OF }:指明触发器是在执行操作之后还是代替执行操作之前运行。
  • {update,delete,insert}:指明在何种操作时运行触发器。
  • ON {table_name}:指明在哪张表上运行触发器。
  • [REFERENCING [{OLD | NEW} AS alias_name}]:指明“OLD”或“NEW”关键字。这可以帮助我们引用旧值或新值。
  • [FOR EACH {ROW | STATEMENT}]:指明触发器是对每一行记录执行还是对整个语句执行。
  • [WHEN (logical_expression)]:定义逻辑测试。如果测试失败,则该触发器不会被触发。
  • {sql_statement}:需要在触发器中执行的 SQL 语句。

SQL Server 触发器创建示例

示例1:创建一个简单的SQL Server触发器

在 AdventureWorks 数据库上创建一个员工信息表,并在该表上创建一个触发器,以确保每个新员工的雇佣日期按年月日顺序执行。

USE AdventureWorks
GO

CREATE TABLE Employee
(
 EmployeeID INT PRIMARY KEY IDENTITY(1,1),
 LastName VARCHAR (50) NOT NULL,
 FirstName VARCHAR (50),
 HireDate DATE
)
GO

CREATE TRIGGER tr_insert_employee
ON Employee
FOR INSERT
AS
BEGIN
 IF EXISTS (
 SELECT 1
 FROM inserted i
 WHERE i.HireDate < CAST(GETDATE() AS DATE)
 )
 BEGIN
 PRINT 'Cannot insert employee with hire date before today!'
 ROLLBACK TRANSACTION
 RETURN
 END

 DECLARE @insertedID INT
 SELECT @insertedID = [EmployeeID] FROM INSERTED

 UPDATE Employee SET [HireDate] = CAST(CONVERT(VARCHAR(10), [HireDate], 111) AS DATE) WHERE EmployeeID = @insertedID
END

示例2:创建一个基于多个表的SQL Server触发器

在 AdventureWorks 数据库上创建两个员工信息表:Employee和EmployeeBackup,并在这两个表上创建触发器,以确保当 Employee 中的数据更新时,EmployeeBackup 中的对应数据也会得到更新。

USE AdventureWorks
GO

CREATE TABLE Employee
(
 EmployeeID INT PRIMARY KEY IDENTITY(1,1),
 LastName VARCHAR (50) NOT NULL,
 FirstName VARCHAR (50),
 HireDate DATE
)
GO

CREATE TABLE EmployeeBackup
(
 EmployeeID INT PRIMARY KEY,
 LastName VARCHAR (50) NOT NULL,
 FirstName VARCHAR (50),
 HireDate DATE
)
GO

CREATE TRIGGER tr_update_employee
ON Employee
AFTER UPDATE
AS
BEGIN
 UPDATE EmployeeBackup
 SET LastName = i.LastName,
     FirstName = i.FirstName,
     HireDate = i.HireDate
 FROM EmployeeBackup e
 INNER JOIN inserted i ON i.EmployeeID = e.EmployeeID
END

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL Server 触发器实例详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • 如何在Python中使用Django ORM操作数据库?

    如何在Python中使用Django ORM操作数据库? Django ORM是Django框架中的一个组件,它提供了一种简单的方式来操作数据库。使用Django ORM,我们可以使用Python代码来创建、读取、更新和删除数据库中的数据。以下是如何在Python中使用Django ORM操作数据库的完整使用攻略,包括连接数据库、创建模型、插入数据、查询数据…

    python 2023年5月12日
    00
  • 如何使用Python在MySQL中创建表?

    要使用Python在MySQL中创建表,可以使用Python的内置模块sqlite3或第三方库mysql-connector-python。以下是使用mysql-connector-python在MySQL中创建完整攻略: 连接 要连接到MySQL,需要提供MySQL的主机、用户名、和密码。可以使用以下代码连接MySQL: mysql.connector m…

    python 2023年5月12日
    00
  • Docker下mysql设置字符集的方法

    你好,关于Docker下mysql设置字符集的方法,以下是完整攻略: 1. 在Docker镜像中添加locale 在Dockerfile中添加以下语句: RUN apt-get update && apt-get install -y locales \ && echo "en_US.UTF-8 UTF-8&quot…

    database 2023年5月21日
    00
  • pymongo为mongodb数据库添加索引的方法

    添加索引是提高MongoDB数据库查询性能的一种有效方法,而Pymongo是Python语言操作MongoDB的工具库。下面介绍Pymongo为MongoDB添加索引的方法攻略。 1. 创建客户端连接 要使用Pymongo操作MongoDB,需要创建一个连接MongoDB的客户端。可以通过以下代码创建客户端连接: from pymongo import Mo…

    database 2023年5月22日
    00
  • 基于多CPU多核架构的redis性能优化

    目录 CPU架构 问题 优化 CPU架构 一个 CPU 处理器中一般有多个物理核。 每个物理核都拥有私有的一级缓存( L1 cache)和私有的二级缓存(L2 cache)。 不同的物理核还会共享一个共同的三级缓存 每个物理核通常都会运行两个超线程,也叫作逻辑核。同一个物理核的逻辑核会共享使用 L1、L2 缓存 不同处理器间通过总线连接 问题 1、多CPU:…

    Redis 2023年4月12日
    00
  • MySQL Administrator 登录报错的解决方法

    MySQL Administrator 是一个常用的 MySQL 数据库管理工具,但是在使用过程中,会遇到登录时报错的情况。本文将详细讲解 MySQL Administrator 登录报错的解决方法,并提供示例说明。 问题背景 在使用 MySQL Administrator 登录时,可能会遇到以下报错信息: Could not connect to the …

    database 2023年5月18日
    00
  • MySQL外键约束(FOREIGN KEY)详解

    MySQL的外键约束是一种保证数据完整性的机制,它可以强制要求一个列或列组合与另一张表中的数据匹配。外键约束规定了在一个表中某个列的值必须是另一张表中某个列的值。 外键约束的作用 可以确保数据的完整性,防止插入无效数据; 在删除或更新主表数据时,自动删除或更新关联的子表数据,便于维护数据一致性; 外键约束使用方法 创建外键约束语法:CREATE TABLE …

    MySQL 2023年3月9日
    00
  • Oracle数据加载和卸载的实现方法

    Oracle数据加载和卸载的实现方法 1. 数据加载方法 Oracle提供了很多种数据加载的方法,包括使用命令行工具、使用Oracle Data Pump等,以下将详细介绍其中常用的两种方法。 1.1 SQL Loader SQL Loader是Oracle提供的一个命令行工具,可用于将数据加载到Oracle数据库中。它能够高效地处理大量数据,并提供了多种数…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部