在SqlServer2008R2中,在一张表上加上insert、update、delete触发器(带游标)
在日常工作中,在SqlServer2008R2中,需要向一张表上加上触发器,监控插入、更新、删除。
--一个触发器内三种INSERT,UPDATE,DELETE状态
IF exists(select 1 from inserted) and not exists(select 1 from deleted)
begin
--INSERT
end IF exists(select 1 from inserted) and exists(select 1 from deleted)
begin
--UPDATE
end IF exists(select 1 from deleted) and not exists(select 1 from inserted)
begin
--DELETE
end --插入操作(Insert):Inserted表有数据,Deleted表无数据
--删除操作(Delete):Inserted表无数据,Deleted表有数据
--更新操作(Update):Inserted表有数据(新数据),Deleted表有数据(旧数据)
下面是我这写的语句,供网友借鉴、参考:
CREATE trigger [dbo].[deal_Trace_globe_Data] on [dbo].[DirectPriceZoneAndBunding]
for insert,update,delete as
begin
--插入或更新
IF exists(select 1 from inserted)
begin
DECLARE @ID nvarchar(50)
DECLARE @CustCode nvarchar(8)
DECLARE @Version int
DECLARE @OperateTime datetime DECLARE c1 CURSOR for
SELECT [ID],[CustCode],[Version],[OperateTime] from inserted OPEN c1
FETCH NEXT FROM c1 into @ID,@CustCode,@Version,@OperateTime
WHILE @@FETCH_STATUS=0
BEGIN
DECLARE @Count int
DECLARE @No_Count int --插入
if not exists(select 1 from deleted)
begin
SELECT @Count = count(1) FROM trace_globe.dbo.DirectPriceZoneAndBunding WHERE ID = (select ID from inserted)
SELECT @No_Count = COUNT(1) FROM inserted
IF @Count <=0 and @No_Count>0
begin
insert into trace_globe.dbo.DirectPriceZoneAndBunding([ID],[CustCode],[Version],[OperateTime])
select [ID],[CustCode],[Version],[OperateTime] from inserted where ID=@ID
end
end
else
--更新
begin
SELECT @Count = count(1) FROM trace_globe.dbo.DirectPriceZoneAndBunding WHERE ID = (select ID from deleted)
SELECT @No_Count = COUNT(1) FROM deleted
IF @Count >0 and @No_Count>0
begin
update trace_globe.dbo.DirectPriceZoneAndBunding
set [ID]=@ID,[CustCode]=@CustCode,[Version]=@Version,[OperateTime]=@OperateTime
where [ID]=@ID
end
end FETCH NEXT FROM c1 into @ID,@CustCode,@Version,@OperateTime
END
CLOSE c1
DEALLOCATE c1
end --删除
IF exists(select 1 from deleted) and not exists(select 1 from inserted)
begin
DECLARE @deleteID nvarchar(50) DECLARE c2 CURSOR for
SELECT [ID] from deleted OPEN c2
FETCH NEXT FROM c2 into @deleteID
WHILE @@FETCH_STATUS=0
BEGIN
delete from trace_globe.dbo.DirectPriceZoneAndBunding where ID=@deleteID FETCH NEXT FROM c2 into @deleteID
END
CLOSE c2
DEALLOCATE c2
end
end
在SqlServer2008R2中,在一张表上加上insert、update、delete触发器(带游标)的更多相关文章
- SQL基础语法的单表操作 select|insert|update|delete(增删改查) 简单使用
以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select 字段名 from 表名 此种查询只列出你所需要查询的字段, ...
- oracle中execute immediate的使用(select/insert/update/delete)(转)
execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...
- [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
[转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...
- 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中
1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...
- mysql 和 sqlserver中备份一张表的区别
sqlserver中备份一张表 SELECT * into qa_buglist_bak FROM qa_buglist 不管表的数据有多大,速度很快: mysql中上述语句就无效了,须得新建一张表, ...
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- mysql创建某个数据库中的某张表 只读用户
1.创建用户,并授权SELECT查询权限,授权远程访问权限,注意,命令中username/password指用户名密码,请自己指定.若要限制仅指定IP可以使用此用户访问Mysql,将%改为具IP即可, ...
- sql中同一个Trigger里同时包含Insert,Update,Delete
sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...
- (转载)详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
郑重声明:原文转载于http://dengqi.blog.51cto.com/5685776/1223132 向好文章致敬!!! 一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理 ...
随机推荐
- 追踪记录每笔业务操作数据改变的利器——SQLCDC
对于大部分企业应用来用,有一个基本的功能必不可少,那就是Audit Trail或者Audit Log,中文翻译为追踪检查.审核检查或者审核记录.我们采用Audit Trail记录每一笔业务操作的基本信 ...
- 复利计算APP版-----娱乐一下
先不说那么多,下载地址来一个:http://pan.baidu.com/s/1eSz2GBg 目前版本号为:0.3 lastest 软件上线了!三平台首发! 下载地址: http://shouji.b ...
- Linux usual cmd
日常工作时常需要用到,在此备份一下: <1> top命令 第一行:当前系统时间为23:31:59,系统已经运行了127天又19小时47分钟,当前系统只要一个用户即root,load ave ...
- css3实现圆形逐渐减少动画
写这个动画刚开始完全没有思路,后来参考网上的资料发现可以用半圆实现,具体原理如下: 1.,一个div作为背景,三个div做出三个半圆出来,一个用于旋转,一个靠左(用于与背景吻合),一个靠右(用于与背景 ...
- LeetCode 344. Reverse String
Problem: Write a function that takes a string as input and returns the string reversed. Example: Giv ...
- iOS Swift 数组 交换元素的两种方法
swap(&arr[fromIndexPath.row], &arr[to.row]) (arr[fromIndexPath.row],arr[to.row]) = (arr[to.r ...
- storm学习好文链接
大圆的那些事:http://www.cnblogs.com/panfeng412/tag/Storm/ xcc的博客:http://blog.csdn.net/damacheng/article/ca ...
- java.lang.NoSuchMethodError: android.view.View.setBackground
int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { ...
- PHP_SELF、 SCRIPT_NAME、 REQUEST_URI区别
$_SERVER[PHP_SELF], $_SERVER[SCRIPT_NAME], $_SERVER['REQUEST_URI'] 在用法上是非常相似的,他们返回的都是与当前正在使用的页面地址有关的 ...
- 第三周作业(三):wc程序
本程序实现了统计文本档案中,文本单词数.字符数以及行数. 代码如下: #include<stdio.h> #include<stdlib.h> int linestatisti ...