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 批量触发器的更多相关文章

  1. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  2. SQL批量添加主键脚本

    --SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...

  3. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  4. Oracle数据库编程:使用PL/SQL编写触发器

    8.使用PL/SQL编写触发器: 触发器存放在数据缓冲区中.        触发器加序列能够实现自动增长.        在触发器中不能使用connit和rollback.        DML触发器 ...

  5. sql server触发器的例子

    发布:thebaby   来源:脚本学堂     [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...

  6. 15、SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...

  7. SQL批量信息保存(XML格式字符串数据)

    /* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE  PROC [dbo].[sp_SaveToMX1]@XML text   --明细表XML字符串信息ASBEG ...

  8. (转)SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...

  9. 自己写的sql server触发器练练--高手请您跳过吧

    set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...

随机推荐

  1. Java日志体系(二)log4j

    1.1 简介 Log4j是一个由Java编写可靠.灵活的日志框架,是Apache旗下的一个开源项目: 使用Log4j,我们更加方便的记录了日志信息,它不但能控制日志输出的目的地,也能控制日志输出的内容 ...

  2. Android View重绘和更新: invalidate和requestLayout 总结的不错 赶紧复制。。哈哈

    总述:View有两个很重要的方法:invalidate和requestLayout,常用于View重绘和更新. Invalidate:To farce a view to draw,call inva ...

  3. Driver drowsy detection dataset

    Introduction Driver drowsy detection dataset consists of both male and female drivers, with various ...

  4. SpringBoot搭建聚合项目-实战记录01

    工具:Spring Tool Suite 4 项目搭建 1.首先建立工作集 : Configure Working Sets -> New.. ->设置名称(如project) -> ...

  5. 11个顶级 JavaScript 日历插件

    参考链接:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMDY0NA==&mid=2247487050&idx=1&sn=e1cf66726 ...

  6. co源码

    co模块整体包括三部分 对于几种参数类型的判断,主要判断是否object,array,promise,generator,generatorFunction这几种; 将几种不同的参数类型转换为prom ...

  7. 菜鸟系列k8s——快速部署k8s集群

    快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...

  8. python入门小结

    以下划线开头的标识符是有特殊意义的.以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入: 以双下划 ...

  9. layui 实现图片上传和预览

    [学习笔记] 图片不自动上传并在表单提交时再上传,看代码. 附上表单页面 前台实现 <#--图片名--><input id="fileName" type=&qu ...

  10. 后缀自动机----一种将字符串变成DAG的方法

    后缀自动机 (suffix automaton, SAM) 是一个能解决许多字符串相关问题的有力的数据结构.(否则我们也不会用它) 举几个例子,以下的字符串问题都可以在线性时间内通过 SAM 解决 1 ...