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. Qt编写自定义控件13-多态进度条

    前言 多态进度条,顾名思义,有多重状态,其实本控件主要是用来表示百分比进度的,由于之前已经存在了百分比进度条控件,名字被霸占了,按照先来先得原则,只好另外取个别名叫做多态进度条,应用场景是,某种任务有 ...

  2. 一百零二:CMS系统之sweetalert提示框和使用

    实现效果 css body.stop-scrolling { height: 100%; overflow: hidden; } .sweet-overlay { background-color: ...

  3. quartz定时任务表达式案例

    表示式 说明 "0 0 12 * * ? " 每天12点运行 "0 15 10 ? * *" 每天10:15运行 "0 15 10 * * ?&quo ...

  4. VS2019 + Qt5.13 配置

    在安装完VS2019后,再安装Qt5.13选择安装msvc2017模块,再安装qt-vsaddin插件,我选的是2.4版本,反正安装最新的也不会错. 安装成功后,新建项目,发现问题 Entry Poi ...

  5. 基于request的爬虫练习

    引言 概述 概念:基于网络请求的模块 作用:用来模拟浏览器发请求,从而实现爬虫 通用爬虫 步骤: 指定url 请求发送:get返回的是一个响应对象 获取响应数据: text返回的是字符串形式的响应数据 ...

  6. Go项目实战:打造高并发日志采集系统(六)

    前情回顾 前文我们完成了日志采集系统的日志文件监控,配置文件热更新,协程异常检测和保活机制. 本节目标 本节加入kafka消息队列,kafka前文也介绍过了,可以对消息进行排队,解耦合和流量控制的作用 ...

  7. XmlEncrypt

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. python装饰器的构建

    #!/usr/bin/python3# -*-coding:utf-8 -*-# @Time : 2019/9/27 17:04# @Author : v_ctaozhang import funct ...

  9. Java 基础篇之泛型

    背景 在没有泛型前,一旦把一个对象丢进集合中,集合就会忘记对象的类型,把所有的对象都当成 Object 类型处理.当程序从集合中取出对象后,就需要进行强制类型转换,这种转换很容易引起 ClassCas ...

  10. 【Abode Air程序开发】iOS证书(.p12)和描述文件(.mobileprovision)申请

    iOS证书(.p12)和描述文件(.mobileprovision)申请 5+App开发 Apple证书 iOS证书 iOS有两种证书和描述文件: 证书类型 使用场景 开发(Development)证 ...