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日

相关文章

  • Linux中出现“No space left on device”错误的排查与解决方法

    Linux中出现“No space left on device”错误的排查与解决方法 在 Linux 系统中,如果你经常进行文件存储或日志记录等操作,很可能会遇到 “No space left on device” 错误。这个错误提示表明你的文件系统已经无法再存储更多数据了,这时候需要采取措施解决问题。本文将详细讲解如何排查和解决这个问题。 排查问题 使用…

    database 2023年5月22日
    00
  • Oracle对字段的增删改方法分享

    Oracle对字段的增删改方法分享 在Oracle数据库中,我们可以通过对表中字段进行增删改来实现对数据库结构的调整和完善。本文将从以下三个方面介绍Oracle对字段的增删改方法: 添加字段 修改字段 删除字段 注意:操作前请确认当前用户有对目标表的DDL权限。 1. 添加字段 在Oracle中,我们可以使用 ALTER TABLE 语句添加字段。 语法如下…

    database 2023年5月21日
    00
  • 【MySQL】Windows安装zip版的mysql

    1. 首先下载在官网下载zip版的mysql。https://dev.mysql.com/downloads/mysql/    然后右键“此电脑”-> “属性” ->“高级系统设置”->“环境变量”->“新建”   添加环境变量的名字为MYSQL_HOME  , 变量值为 路径,如:E:\mysql-5.7.20-winx64  C…

    MySQL 2023年4月12日
    00
  • MySQL数据更新操作的两种办法(数据可视化工具和SQL语句)

    MySQL数据库更新操作是指在已有数据的基础上对数据库中的数据进行修改。常见的两种更新方式为使用数据可视化工具和通过SQL语句手动更新数据库。 一、使用数据可视化工具更新数据库 打开MySQL数据可视化工具,如Navicat、Workbench等; 连接到需要修改的数据库; 选择需要修改的数据表,打开该表的编辑界面; 找到需要更新的数据行,双击该行进行编辑;…

    database 2023年5月22日
    00
  • centos下安装mysql服务器的方法

    当我们在 CentOS 系统下需要使用 MySQL 数据库时,需要先安装 MySQL 服务器。以下是在 CentOS 系统下安装 MySQL 服务器的方法: 安装 MySQL 服务器 在终端中输入以下命令以安装 MySQL 服务器软件包: sudo yum install mysql-server 输入你的 sudo 密码,然后按 Enter 键以继续。 安…

    database 2023年5月22日
    00
  • SpringBoot Application事件监听的实现方案

    下面我来详细讲解“SpringBoot Application事件监听的实现方案”的完整攻略。 什么是SpringBoot Application事件监听? 首先,我们需要了解什么是SpringBoot Application事件监听。 在SpringBoot中,我们可以使用事件监听机制捕捉应用程序的生命周期事件,包括启动前、启动后、关闭前等事件。Sprin…

    database 2023年5月21日
    00
  • docker部署mysql后无法连接的解决方式

    下面是关于“docker部署mysql后无法连接的解决方式”的完整攻略。 1. 前置知识 在进行Docker部署MySQL之前,我们需要掌握以下知识: Docker和Docker Compose的基本使用方法; 对于MySQL的基本配置和运行原理有一定的了解。 2. Docker部署MySQL 在Docker中部署MySQL的方式有很多,本文介绍基本的使用D…

    database 2023年5月18日
    00
  • Mysql连接join查询原理知识点

    Mysql连接join查询原理知识点是数据库领域中非常关键的概念,它将多张表中的数据进行匹配,然后产生更加详细和有用的数据集结果。在进行Mysql连接join查询的时候,有三种常见的方式:inner join,left join,right join。下面将对它们进行详细的解释。 Inner Join inner join就是传统的SQL连接方式,它需要两张…

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