sql 批量触发器
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO ALTER TRIGGER [dbo].[tr_insert_update_delete_sscode]
ON [dbo].[SSCODE]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN DECLARE @v_tableName VARCHAR(4000) = 'SSCODE';
DECLARE @v_columns VARCHAR(4000) = 'ID, TYPEID, CODE, NAME, PYDM, PCODE, PARAM, ISACTIVE, ORDERID'; DECLARE @v_id VARCHAR(20)=''
DECLARE @v_action VARCHAR(1) = ''
DECLARE @v_isrows INT=0
DECLARE @v_row_index INT=1 --增加
IF EXISTS (SELECT 1 FROM inserted) AND NOT EXISTS (SELECT 1 FROM deleted)
BEGIN
SET @v_action = ''
SELECT @v_id=Inserted.ID FROM inserted
SELECT @v_isrows=COUNT(1) FROM inserted
END
--修改
ELSE IF EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
BEGIN
SET @v_action = ''
SELECT @v_id=Inserted.ID FROM inserted
SELECT @v_isrows=COUNT(1) FROM inserted
END
--删除
ELSE IF NOT EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
BEGIN
SET @v_action = ''
SELECT @v_id=deleted.ID FROM deleted
SELECT @v_isrows=COUNT(1) FROM deleted
END --当行修改
IF @v_isrows=1
BEGIN
PRINT '单行逻辑'
--调用存储过程
EXEC dbo.PROC_Sync_Start @i_columns = @v_columns, -- varchar(8000)
@i_tablename = @v_tableName, -- varchar(1000)
@i_id = @v_id, -- varchar(20)
@i_action = @v_action -- varchar(1)
END
--多行修改
ELSE IF @v_isrows>1
BEGIN
PRINT '多行逻辑'
--创建临时表结构
CREATE TABLE #TableRows
(
RId INT IDENTITY(1, 1) NOT NULL,
Id VARCHAR(20),
PRIMARY KEY (RId)
);
--插入操作数据到id集合表。
IF @v_action='' OR @v_action=''
BEGIN
INSERT #TableRows(Id)
SELECT ID FROM Inserted
END
ELSE IF @v_action = ''
BEGIN
INSERT #TableRows(Id)
SELECT ID FROM Inserted
END DECLARE @v_index_id VARCHAR(20)=''
WHILE @v_row_index<=@v_isrows
BEGIN
SELECT @v_index_id=Id FROM #TableRows WHERE RId=@v_row_index
--调用存储过程
EXEC dbo.PROC_Sync_Start @i_columns = @v_columns, -- varchar(8000)
@i_tablename = @v_tableName, -- varchar(1000)
@i_id = @v_index_id, -- varchar(20)
@i_action = @v_action -- varchar(1)
SET @v_row_index=@v_row_index+1
END
END END; GO
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO -- =============================================
-- Author: WUXIAODONG
-- Create date: 2019-08-12 13:01:07
-- Description: <基础数据同步插入队列消息>
-- =============================================
ALTER PROCEDURE PROC_Sync_Start
(
@i_columns VARCHAR(8000),
@i_tablename VARCHAR(1000),
@i_id VARCHAR(20),
@i_action VARCHAR(1)
)
AS
BEGIN
SET NOCOUNT ON;
--SELECT STUFF((select CODE,NAME,PYDM,PCODE,PARAM,ISACTIVE,ORDERID from SSCODE where id='000000458EA840000CCA' for xml path('DATA')),1,0,'')
DECLARE @v_sql NVARCHAR(4000)
DECLARE @v_rtn VARCHAR(max)=''
IF @i_action<>''
BEGIN
SET @v_sql='SELECT @v_data=STUFF((select '+@i_columns+' from '+@i_tableName +' where id='''+@i_id+''' for xml path(''DATA'')),1,0,'''')'
PRINT @v_sql
EXECUTE sp_executesql @v_sql,N'@v_data VARCHAR(max) output',@v_rtn output
END INSERT syncsmmq ( ID, EXCHANGENAME, ROUTINGKEY, MSGBODY, CDATE, DELAYTIME, PROCESDATE, BASEID, MEMO, STATUS )
VALUES ( dbo.FUNC_SS_NEWID('','','C',NEWID()), 'sync_basic_data', 'N', '{"ID":"'+@i_id+'","TableCode":"'+@i_tablename+'","columns":"'+@i_columns+'","Data":"'+@v_rtn+'","Action":"'+@i_action+'"}', GETDATE(), 0, GETDATE(), '', '', 1 ) END GO
sql 批量触发器的更多相关文章
- SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int
--SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...
- SQL批量添加主键脚本
--SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- Oracle数据库编程:使用PL/SQL编写触发器
8.使用PL/SQL编写触发器: 触发器存放在数据缓冲区中. 触发器加序列能够实现自动增长. 在触发器中不能使用connit和rollback. DML触发器 ...
- sql server触发器的例子
发布:thebaby 来源:脚本学堂 [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...
- SQL批量信息保存(XML格式字符串数据)
/* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE PROC [dbo].[sp_SaveToMX1]@XML text --明细表XML字符串信息ASBEG ...
- (转)SQL Server 触发器
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
- 自己写的sql server触发器练练--高手请您跳过吧
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...
随机推荐
- Centos7.4.1708搭建syslog服务
系统:centos7.4.1708环境:无互联网环境syslog使用端口为 UDP 514 将/etc/yum.repos.d目录下除CentOS-Media.repo文件所有文件重命名cd /etc ...
- 监控web80端口
判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己. #! /bin/bashmail=123@123.comif netstat ...
- MySQL 性能优化系列之一 单表预处理
MySQL 性能优化系列之一 单表预处理 背景介绍 我们经常在写多表关联的SQL时,会想到 left jion(左关联),right jion(右关联),inner jion(内关联)等. 但是,当表 ...
- Vue组件v-if新渲染的组件不更新
Vue组件v-if新渲染的组件不更新:可能原因是Vue识别到是相似组件(高度相似甚至相同)不会更新元素.给原来的组件和新组件分别给不同的key值让Vue识别为不同的组件.
- linux下正确卸载rpm包
linux下正确卸载rpm包 rpm -qa | grep -i ntp 执行结果: [root@bogon elasticsearch-head]# rpm -qa | grep -i ntp fo ...
- 【miscellaneous】单播、广播和多播IP地址
转自:http://www.cnblogs.com/gaoxing/archive/2012/02/19/2358484.html 除地址类别外,还可根据传输的消息特征将IP地址分为单播.广播或多播. ...
- 如何写出优雅耐看的JavaScript代码
参考链接:https://segmentfault.com/a/1190000020444918?utm_medium=hao.caibaojian.com&utm_source=hao.ca ...
- 支付宝网站即时支付开发,MD5加签名规则处理代码展示
一.如果传入进来的Object对象,最后生成制定格式的字符换 text: list拼接成字符串,map中的所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,list的元素之间用“| ...
- 使用Java实现hello/hi的简单网络聊天程序
Socket又称套接字,是基于应用服务与TCP/IP通信之间的一个抽象,它是计算机之间进行通信的一种约定或一种方式.通过socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送 ...
- poj3122 Pie (二分)
题目链接:https://vjudge.net/problem/POJ-3122 题意:有n块饼,m+1个人,将饼均分成m+1块,求每块最大的大小. 思路:水二分,显然每块的大小与可以给多少人吃具有单 ...