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] ...
随机推荐
- jquery简单入门1
前端 html:展示 form: 属性: action和method 子标签: input(10种) text password radio checkbox file submit button r ...
- python装饰器的构建
#!/usr/bin/python3# -*-coding:utf-8 -*-# @Time : 2019/9/27 17:04# @Author : v_ctaozhang import funct ...
- Dell 12V/18A电源适配器接口改造
手头有几个航模用的充电器,原来一直用实验室电源,不方便移动,为了便携省地方,就想配个合适的电源.在网上找了下,航模专用的适配器价格太高,国产的杂牌适配器功率虚标严重并且可靠性是个问题,工业用的电源基本 ...
- 如何查看linux系统安装时间
第一种方法: 先查看系统盘挂到哪个分区上,然后用 dumpe2fs 查看这个磁盘分区 创建的时间,即可查出此 服务器 系统安装的时间.() # dumpe2fs /dev/sda3|grep -i ...
- import、from 模块 import*、reload
import 模块名.from 模块名 import* 均为导入模块,前者调用模块中函数或者变量时需要添加引用,即模块名.调用函数或者变量名 具体用法见下 https://jingyan.baidu. ...
- 无监督异常检测之LSTM组成的AE
我本来就是处理时间序列异常检测的,之前用了全连接层以及CNN层组成的AE去拟合原始时间序列,发现效果不佳.当利用LSTM组成AE去拟合时间序列时发现,拟合的效果很好.但是,利用重构误差去做异常检测这条 ...
- 【机器学习】QQ-plot深入理解与实现
QQ-plot深入理解与实现 26JUN June 26, 2013 最近在看关于CSI(Channel State Information)相关的论文,发现论文中用到了QQ-plot.Sigh!我承 ...
- (转)利用Beautiful Soup去抓取p标签下class=jstest的内容
1.利用Beautiful Soup去抓取p标签下class=jstest的内容 import io import sys import bs4 as bs import urllib.request ...
- jps 命令
NAME jps - Lists the instrumented Java Virtual Machines (JVMs) on the target system. This command is ...
- NIKKEI Programming Contest 2019-2 Task D. Shortest Path on a Line
Observations ① 从 $1$ 到 $N$ 的最短路一定是不走回头路的.所谓走回头路是指从序号大的点走到序号小的点. 证明:首先,任意从 $1$ 到 $N$ 的路径的最后一步一定不是回头路. ...