Loading

SQL Server教程:触发器 trigger

一、trigger的介绍

触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。

触发器可以与特定表上的 INSERTDELETEUPDATE 操作(或组合)相关联。

💡 一般来说,约束的处理比触发器快,若能通过约束解决则优先考虑约束,而不是触发器

二、trigger的创建

2-1 异表

实验目的:利用trigger,将插入表 student 的数据,同步插入到表 student_copy
前提条件: 已经创建表 student 和 表 student_copy,且两张表的数据类型一样

trigger创建

USE [event_db]
GO
/****** Object:  Trigger [dbo].[student_trigger]    Script Date: 2022-12-20 12:49:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER TRIGGER [dbo].[student_trigger] 
   ON  [dbo].[student] 
   AFTER INSERT
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for trigger here
	-- 定义变量
	declare @id int
	declare @name nchar(10)
	declare @age int

	select @id=id, @name=name, @age=age from inserted
	insert into [dbo].[student_copy](id, name, age) values(@id, @name, @age)

END

student插入数据

USE [event_db]
GO

INSERT INTO [dbo].[student]
           ([id]
           ,[name]
           ,[age])
     VALUES
           (1001
           ,'韩信'
           ,50)
GO

❤ 查看表 studentstudent_copy 的数据

student


student_copy

2-2 同表

需求:update操作完成后,自动添加操作时间

未创建触发器之前:select oid,o_status,o_time from tUser where oid='50E4BCEC-004B-445D-852D-0004B181B28D'

创建触发器命令:

create trigger trigger_o_time ON tUser 
after  update
AS
begin
  update  tUser set o_time = GETDATE() 
  from tUser t
  INNER JOIN Inserted i on t.oid = i.oid
end

更新指定行 o_status 命令:update tUser set o_status=1 where oid='50E4BCEC-004B-445D-852D-0004B181B28D'

查询指定行命令,验证结果:select oid,o_status,o_time from tUser where oid='50E4BCEC-004B-445D-852D-0004B181B28D'

对比以上两张图,可以验证在更新某一列完成时,触发器自动在更新的这一行添加时间戳。

三、参考来源

01-SQL Server教程 - T-SQL-触发器(TRIGGER)

02-sqlserver在更新任意字段时设置当前时间戳

posted @ 2022-12-20 14:53  eiSouthBoy  阅读(577)  评论(0编辑  收藏  举报