sqlserver利用游标实现行级触发器
oracle实现行级触发器的方法是用for each row
SqlServer
触发器形成的交互数据分别存在系统临时表的inserted和deleted中
要实现对这些数据集的行级操作,即一行行的取出来就需要游标(这是我的想法,有其他办法的大神请指教)
以下是我今天碰到的业务需求中做出来的触发器
游标的使用是对数据库性能造成负担的,所以慎用
--后记,此触发器真的造成数据库很卡,后来停掉改用其他方法了
-
set
ANSI_NULLS ON -
set
QUOTED_IDENTIFIER ON -
go
-
-
ALTER
TRIGGER [weixin] ON [dbo].[Study] -
FOR
-
AS
-
-
if(update(ReserveInt3))
-
begin
-
-
mycur cursor for -
a.hospitalizedno "reportId", -
"reportTitle", -
reportDate ,120) "reportDate", -
"patientName", -
0 -
"healthCardNo" -
-
inserted a -
join patient b on a.patientid=b.patientid -
convert(varchar(10), studydate , 120 )= convert(varchar(10), GETDATE(), 120 )a.reserveint3 > 6 -
-
mycur -
-
declare
@blh nvarchar(32), -
-
nvarchar(150), -
nvarchar(20), -
varchar(20), -
nvarchar(5), -
-
-
-
next from mycur into -
, -
, -
, -
, -
, -
-
-
-
--跨数据库查询,通过病历号在HIS查到最新卡号 -
@healthCardNo = (select top 1 card_nofrom openquery(HIS,'select a.BLH as blh, b.fcardno as card_no from mzsf.mzys_tbs_jz_rec a,hthis.p_bhm_medicard b -
where a.pat_id = b.fpat_id order by a.xtrq desc' where blh = @blh ) -
-
--插入到微信临时表
-
into weixin_lsb values( @reportId , -
, -
, -
, -
, -
) -
-
next from mycur into -
, -
, -
, -
, -
, -
-
-
mycur -
mycur -
end
-
-