SqlServer 中的触发器
SqlServer 触发器实现多表之间同步增加、删除与更新
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。
触发器的使用模版如下
CREATE TRIGGER 触发器名称
ON 表名称
AFTER INSERT /UPDATE/DELETE
AS BEGIN INSERT INTO
B表(B表字段1,B表字段2,B表字段3)
SELECT A表字段1,A表字段2,A表字段3
FROM INSERTED/DELETED
END
新建两张表,如下,第一张是操作表,第二张表是为了测试触发器效果的
create table dbo.testtable(
id int identity (1,1),
name varchar(20)) create table dbo.htesttable(
id int identity (1,1),
name varchar(20),
timerecord datetime,
updatedt datetime)
新增的触发器
CREATE TRIGGER [DBO].[TRG_TESTTABLE_INSERT] ON [DBO].[TESTTABLE] AFTER INSERT AS
BEGIN INSERT INTO HTESTTABLE
SELECT I.NAME+'INSERT' ,GETDATE(),GETDATE()
FROM INSERTED I END
更新的触发器
ALTER/Create TRIGGER [dbo].[TRG_TESTTABLE_update] ON [dbo].[testtable] AFTER update AS
BEGIN INSERT INTO HTESTTABLE
SELECT I.NAME + 'update',getdate(),getdate()
FROM deleted I INSERT INTO HTESTTABLE
SELECT I.NAME + 'update2',getdate(),getdate()
FROM inserted I END
解释:
在删除(delete)数据的时候,可以假定数据库将要删除的数据放到一个deleted临时表中,我们可以向读取普通的表一样,select 字段 from deleted
而insert的时候道理一样,只不过是把要插入的数据放在inserted表中。
更新操作可以认为是执行了两个操作,先把那一行记录delete掉,然后再insert,
这样update操作实际上就对deleted表和inserted表的操作,所以不会有updated表了;
有的时候两个表是主外键关系,想删除主表数据的同时把子表相关的数据也删除,
这个时候如果用触发器就没有效果了,因为这个触发器是在你删除表后才触发的,
这个时候直接终止,提示“有主外键关系,不能删除等”,所有这样的删除触发器是没有效果的
删除的触发器
CREATE TRIGGER [DBO].[TRG_TESTTABLE_DELETE] ON [DBO].[TESTTABLE] AFTER DELETE AS
BEGIN INSERT INTO HTESTTABLE
SELECT D.NAME + 'DELETE',GETDATE(),GETDATE()
FROM DELETED D END
如果需要对触发器重命名,只要记住触发器是特殊的存储过程即可,命令如下
exec sp_rename oldxxx, newxxx
如何查询触发器
SELECT * FROM SYSOBJECTS WHERE XTYPE='TR'
禁用:alter table 表名 disable trigger 触发器名称
启用:alter table 表名 enable trigger 触发器名称
SqlServer 中的触发器的更多相关文章
- Sqlserver中的触发器
一 什么是触发器 1.1 触发器的概念 触发器(trigger)是SQL server来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行是由事件来触发,当对一个表进行操作( ...
- 知方可补不足~sqlserver中触发器的使用
回到目录 触发器在过去的10年中,即存储过程和ado.net称霸江湖期间是那么的重要,而现在,trigger显得不是那么必要的,我们很少将复杂的业务写在SQL里,当然也会没有机会写到trigger里了 ...
- Sqlserver中存储过程,触发器,自定义函数(二)
Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...
- Sqlserver中存储过程,触发器,自定义函数(一)
Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...
- Sqlserver中存储过程,触发器,自定义函数
Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
- SQLSERVER中的假脱机spool
SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...
- SqlServer基础之(触发器)
概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...
- (转)笔记320 SQLSERVER中的加密函数 2013-7-11
1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...
随机推荐
- apiCloud中的API对象
1.属性 appId apiready = function () { var appId = api.appId; //比如: A6980386445546 var appName = api.ap ...
- php 查找字符串里面中文字符第一次出现的位置,并插入字符串
//查找字符串里面中文字符第一次出现的位置,并插入字符串 function find_first_chinese_insert($str,$insert_str){ $count = mb_strle ...
- protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 2, class-id=60, method-id=80)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.c ...
- CentOS7 彻底关闭 IPV6
查看服务监听的IP中是否有IPv6格式的地址 netstat -tuln 如果有tcp6协议的就是有打开ip6 编辑/etc/default/grub,在GRUB_CMDLINE_LINUX加上的后面 ...
- bash 特性
命令hash: 缓存此前命令的查找结果:key-value key:搜索键 value:值
- 【Python020--内嵌函数和闭包】
一.内嵌函数&闭包 1.最好是访问全局变量而不是修改全局变量,修改全局变量Python会内部屏蔽(修改后,函数会内部创建一个和全局变量一抹一样的变量) >>> count = ...
- topcoder srm 525 div1
problem1 link 最后剩下的是中间的一个矩形.所以可以直接枚举这个矩形,如果它含有的硬币个数等于$K$,则再计算移动的最少次数,更新答案. problem2 link 首先,每个节点发送每种 ...
- Spring 学习——Spring JSR注解——@Resoure、@PostConstruct、@PreDestroy、@Inject、@Named
JSR 定义:JSR是Java Specification Requests的缩写,意思是Java 规范提案.是指向JCP(Java Community Process)提出新增一个标准化技术规范的正 ...
- django使用session缓存Redis
首先安装redis包 pip install django-redis-sessions 然后在settings中设置 SESSION_ENGINE = 'redis_sessions.session ...
- Python3基础 frozenset 使用list创建frozenset
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...