触发器与存储过程的相互调用

本文介绍如何使用SQL Server中的触发器与存储过程互相调用,实现对表修改操作的跟踪记录。通过创建触发器与辅助表,可以详细记录insert、update及delete操作的相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值