博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
触发器调用存储过程 / 存储过程调用触发器
阅读量:2514 次
发布时间:2019-05-11

本文共 1802 字,大约阅读时间需要 6 分钟。

--触发器如何调用存储过程

create trigger test on table

for insert

as

exec 存储过程名

go

 

--存储过程如何调用触发器

create proc test

as

update table set ...

insert table select ...

delete table ...

 

--我们有一个table如下,需要跟踪修改对该表的insert/update/delete操作:

 

create table testMonitor(c1 int, c2 char(10))

 

--创建的辅助表如下:

create table tempLog_testMonitor(

rowID bigint identity(1,1),

hostname nchar(128),

program_name nchar(128),

nt_domain nchar(128),

nt_username nchar(128),

net_address nchar(12),

loginame nchar(128),

login_time datetime,

EventType nvarchar(30),

parameters int,

EventInfo nvarchar(255)

)

 

--创建的trigger如下:

create trigger trg_testMonitor

on testMonitor

for insert,update,delete

as

begin

 

            declare @hostname nchar(128)

            declare @program_name nchar(128)

            declare @nt_domain nchar(128)

            declare @nt_username nchar(128)

            declare @net_address nchar(12)

            declare @loginame nchar(128)

            declare @login_time datetime

            declare @rowID bigint

 

           

            insert into tempLog_testMonitor(EventType,parameters,EventInfo)

            exec ('dbcc inputbuffer(@@spid)')

            select @rowID = scope_identity()                 

            select  @hostname = hostname,

                        @program_name = program_name,

                        @nt_domain = nt_domain,

                        @nt_username = nt_username,

                        @net_address = net_address,

                        @loginame = loginame,

                        @login_time = login_time

            from master..sysprocesses where spid = @@spid

 

            update tempLog_testMonitor set

            hostname = @hostname,

            program_name = @program_name,

            nt_domain = @nt_domain,

            nt_username = @nt_username,

            net_address = @net_address,

            loginame = @loginame,

            login_time = @login_time

            where rowID = @rowID

end

 

--如果我们执行如下的语句:

insert into testmonitor values(1,'aaa')

update testmonitor set c2 = 'bbb'

delete from testmonitor

 

--您再查询辅助表,就能看到对表修改的相关信息:

select * from tempLog_testMonitor

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12330444/viewspace-448420/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12330444/viewspace-448420/

你可能感兴趣的文章
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(三) 构建镜像
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>