发布网友 发布时间:2022-04-23 01:55
共4个回答
懂视网 时间:2022-04-30 14:21
/****** Object: Trigger [dbo].[部门_Delete] Script Date: 2015/8/31 16:41:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,Ammy,Name> -- Create date: <Create Date,,> -- Description: <Description,显示一次操作触发器修改了多少条记录,> --因为每个操作类型在一次操作时,对一个触发器只激活一次,但是运行的操作可能更新或删除了10条记录, --Inserted表和Deleted表里会有10条记录,用系统变量@@ROWCOUNT 可以得知上一次操作所更改的记录数 -- ============================================= CREATE TRIGGER [dbo].[部门_Delete] ON [test].[dbo].[部门表] AFTER DELETE AS BEGIN PRINT ‘您此次删除了‘+CAST(@@ROWCOUNT AS VARCHAR)+‘条记录‘ END GO部门表_插入:
USE [test] GO /****** Object: Trigger [dbo].[部门_Insert] Script Date: 2015/8/31 16:42:29 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,Ammy,Name> -- Create date: <Create Date,2015/08/19,> -- Description: <Description,部门表插入时发出提示:又添加了一种产品,并向日志表插入一条记录> -- ============================================= CREATE TRIGGER [dbo].[部门_Insert] ON [dbo].[部门表] AFTER INSERT AS BEGIN DECLARE @事件部门名称 NVARCHAR(50) SELECT @事件部门名称=部门名称 FROM inserted IF(SELECT LEN(电话号码) FROM inserted )<>11 BEGIN PRINT‘电话号码位数必须是11位‘ ROLLBACK TRANSACTION END ELSE BEGIN print ‘又添加了一个部门‘ INSERT INTO test.dbo.日志表(事件名,事件人,事件时间)VALUES(‘添加新部门:‘+@事件部门名称,‘admin‘,GETDATE()); --设置此TRIGGER的嵌套类型为true,如果在 dbo.日志表 上建立触发器,会触发激活dbo.日志表_Insert 触发器 END END GO
部门表_更新:
USE [test] GO /****** Object: Trigger [dbo].[部门表_只能修改部门编号] Script Date: 2015/8/31 16:43:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,Ammy,Name> -- Create date: <Create Date,2015-08-20,> -- Description: <Description,用update(字段名),完成只能修改某字段的触发器> -- ============================================= CREATE TRIGGER [dbo].[部门表_只能修改部门编号] ON [dbo].[部门表] Instead of UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE(部门编号) BEGIN DECLARE @部门编号 NVARCHAR(20), @部门名称 NVARCHAR(20), @部门职责 Nvarchar(20) SET @部门编号=(SELECT 部门编号 FROM inserted) SET @部门名称=(SELECT 部门名称 FROM inserted) SET @部门职责 =(SELECT 部门职责 FROM inserted) UPDATE 部门表 SET 部门编号=@部门编号 WHERE 部门名称=@部门名称--AND 部门编号=@部门编号 AND @部门职责=@部门职责 --这种写法很不好,因为只能操作的语句只能按这种修改才起作用 END ELSE BEGIN PRINT ‘只能修改部门编号‘ RAISERROR(‘除了部门编号之外的字段都不允许修改‘,16,5) --PRINT 输出自定义信息,但是只能在查询编辑器窗格中运行SQL语句才能看到这些自定义的信息, --而其他的前端应用程序都不会显示这些自定义的信息 END END GO
日志表触发器:
USE [test] GO /****** Object: Trigger [dbo].[日志表_Insert] Script Date: 2015/8/31 16:44:11 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE TRIGGER [dbo].[日志表_Insert] ON [test].[dbo].[日志表] AFTER INSERT AS BEGIN PRINT‘数据库又有记录变动了‘ END GO
数据库触发器_trigger
标签:
热心网友 时间:2022-04-30 11:29
在SQL中,名词触发器指“在数据库中为响应一个特殊表格中的某些事件而自动执行的程序代码。”(Wikipedia)说得简单一些,它是在一个特殊的数据库事件,如INSERT或DELETE发生时,自动激活的一段代码。触发器可方便地用于日志记录、对单个表格到其他链接式表格进行自动的“层叠式”更改、或保证对表格关系进行自动更新。当一个新整数值增加到数据库域中时,自动更新运行的总数的代码段是一个触发器。自动记录对一个特殊数据库表格所作更改的SQL命令块也是一个触发器实例。热心网友 时间:2022-04-30 12:47
建议不要使用系统的关键字把id该为其他的字段名热心网友 时间:2022-04-30 14:22
触发器的概念: