SQL Server 触发器实例详解

yizhihongxing

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日

相关文章

  • Java连接Redis,存储对象获取对象()byte和json),连接池

    Jedis连接Redis,Lettuce连接Redis Jedis连接Redis 1. 创建maven项目 2. 引入依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId&gt…

    Redis 2023年4月12日
    00
  • javaweb如何实现请求和响应

    JavaWeb是指使用Java技术实现的Web应用程序开发。在JavaWeb开发中,请求和响应是非常重要的概念。接下来,我将为您介绍如何在JavaWeb中实现请求和响应。 1. 请求 1.1. 请求的概念 请求是客户端向服务器发起的访问请求。客户端可以是Web浏览器、爬虫等。请求包含以下信息: 请求行:包括请求方法、请求的URL、协议版本等信息。 请求头:包…

    database 2023年5月21日
    00
  • php-msf源码详解

    PHP-MSF源码详解攻略 一、前言 在开发过程中,我们常常会遇到需要使用其它语言编写的代码,比如我们在 Python 当中的 metasploit 模块,而我们需要使用 PHP 来进行操作,这个时候就需要用到 PHP-MSF,它是一个由 PHP 语言编写的 Metasploit 框架。 二、下载 PHP-MSF 在 GitHub 上可以找到 PHP-MSF…

    database 2023年5月22日
    00
  • 详解MySQL数据库–多表查询–内连接,外连接,子查询,相关子查询

    我们来详细讲解一下“详解MySQL数据库–多表查询–内连接,外连接,子查询,相关子查询”的完整攻略。 多表查询 多表查询是指在数据查询时,涉及到多个数据表之间的关联查询操作。在MySQL数据库中,常用的多表查询方式包括内连接、外连接、子查询和相关子查询。 多表查询的作用是帮助我们在多个数据表之间找出适合的关联数据,从而更方便地查询我们需要的数据。 内连接…

    database 2023年5月22日
    00
  • Redis哨兵模式实现一主二从三哨兵

    实现一主二从三哨兵的 Redis 高可用架构是业务场景中常见的方案之一,下面将介绍其具体实现方案。 一、什么是 Redis 哨兵模式 Redis 哨兵模式是指在 Redis 集群中,引入一些独立的进程,它们会自动检测 Redis 服务器的运行状态,并在主节点异常时进行故障转移。哨兵模式可以帮助 Redis 集群提高可用性,提高业务效率。 二、实现一主二从三哨…

    database 2023年5月22日
    00
  • 细数MySQL中SQL语句的分类

    MySQL作为关系型数据库管理系统,SQL语句分类是我们需要学习的内容之一。下面将详细讲解MySQL中SQL语句的分类。 SQL语句分类 MySQL中的SQL语句可以分为以下几类: 数据定义(DDL)语句 数据定义语句用来创建或删除数据库表、视图、索引等。包括: CREATE:创建数据库表、视图、索引等对象。 DROP:删除数据库表、视图、索引等对象。 AL…

    database 2023年5月21日
    00
  • Hadoop和SQL的区别

    Hadoop和SQL是两个非常流行的数据处理工具,尽管它们都可以用来处理大型数据集,但它们有一些主要的区别。以下是详细讲解Hadoop和SQL的区别的完整攻略。 Hadoop VS SQL 1. 工作范围 Hadoop是一个分布式的大数据处理框架,可以将数据分解成许多块,然后并行在集群中进行处理。它可以处理非结构化和半结构化数据,并使用HDFS(Hadoop…

    database 2023年3月27日
    00
  • mysql事件的开启和调用

    MySQL 事件是一种定期执行的操作,可以定期自动执行特定的任务,比如清除过期的数据、备份数据库等等。下面是MySQL事件的开启和调用的完整攻略。 开启事件调度器 在MySQL命令行中执行以下语句,可以开启事件调度器: SET GLOBAL event_scheduler = ON; 也可以在MySQL配置文件中加入以下配置,实现持久化开启事件调度器: ev…

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