关于触发器的问题,如何记录下批量update,insert,delete等操作下影响的每条记录到日志? 20tabno]

发布时间:2017-1-19 2:17:47 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"关于触发器的问题,如何记录下批量update,insert,delete等操作下影响的每条记录到日志? 20tabno]",主要涉及到关于触发器的问题,如何记录下批量update,insert,delete等操作下影响的每条记录到日志? 20tabno]方面的内容,对于关于触发器的问题,如何记录下批量update,insert,delete等操作下影响的每条记录到日志? 20tabno]感兴趣的同学可以参考一下。

我在很多表里面写了insert,update,delete的触发器,主要功能就是记录下来修改到t_log表里面,这样便于查看历史操作(此设计并不是那么完善,而且是一个很无奈的功能,因为我不知道是否有别的更好的方法记录下这种对数据的修改??)。 但有一个情况,如果使用者在前台程序中单笔操作数据库这些表,则相应触发器会被触发,并写日志到t_log;但是 ,如果我在查询分析器里面进行操作时,比如一条sql语句更新了大批数据,则触发器没有反应啊,记录不下来信息到t_log。 请教各位这个如何解释,怎么回事? 谢谢。

那我就把其我其中一个表的update触发器原样copy下来吧: CREATE TRIGGER tg_T_SXHT_update ON dbo.T_SXHT FOR UPDATE  AS declare @count int,@c1 varchar(255) declare @ZBBH char(5),@YYBBH int, @HTH char(10),@XZH char(6),@XXZH char(10) declare @ZBBH_o char(5),@YYBBH_o int, @HTH_o char(10),@XZH_o char(6),@XXZH_o char(10) declare @HTJE money,@HBLB char(6),@HTRQ datetime,@FHRQ datetime,@XDRQ datetime declare @HTJE_o money,@HBLB_o char(6),@HTRQ_o datetime,@FHRQ_o datetime,@XDRQ_o datetime declare @AZRQ datetime,@SJRQ datetime,@TXCJ char(20),@XZLB char(8) declare @AZRQ_o datetime,@SJRQ_o datetime,@TXCJ_o char(20),@XZLB_o char(8) declare @XZZT char(6),@XWS int,@JTHTH char(10),@XGRDM char(4) declare @XZZT_o char(6),@XWS_o int,@JTHTH_o char(10) declare @BPSL varchar(10),@BPBS int, @RCST varchar(20),@BUG varchar(20),@SBSJRQ datetime declare @BPSL_o varchar(10),@BPBS_o int, @RCST_o varchar(20),@BUG_o varchar(20),@SBSJRQ_o datetime declare @changekey int select @count = @@rowcount if (@count > 0) BEGIN select @changekey = 0 select @XGRDM = XGRDM from inserted select @ZBBH = ZBBH from inserted select @ZBBH_o = ZBBH from deleted if (@ZBBH is not null) select @c1 = '总部编号='+'"'+rtrim(@ZBBH)+'"("'+rtrim(@ZBBH_o)+'")' select @YYBBH=YYBBH from inserted select @YYBBH_o=YYBBH from deleted if (@YYBBH is not null) select @c1 = @c1+',营业部编号="'+rtrim(@YYBBH)+'"("'+rtrim(@YYBBH_o)+'")' select @HTH=HTH from inserted select @HTH_o=HTH from deleted if (@HTH is not null) select @c1 = @c1+',合同号="'+rtrim(@HTH)+'"("'+rtrim(@HTH_o)+'")' if (UPDATE(ZBBH) and not UPDATE(YYBBH))------我的理解,此情况不会发生。 begin select @changekey=1 update t_sxktzt set [email protected],xgrq=getdate() where [email protected]_o update t_sxysmx set [email protected],xgrq=getdate() where [email protected]_o update t_sxssmx set [email protected],xgrq=getdate() where [email protected]_o update t_xw set [email protected],[email protected],xgrq=getdate() where [email protected]_o and [email protected]_o and [email protected]_o  end  if UPDATE(YYBBH) begin select @changekey=1 update t_sxktzt set [email protected],xgrq=getdate() where [email protected]_o and [email protected]_o and [email protected]_o update t_sxysmx set [email protected],xgrq=getdate() where [email protected]_o and [email protected]_o and [email protected]_o update t_sxssmx set [email protected],xgrq=getdate() where [email protected]_o and [email protected]_o and [email protected]_o if (@YYBBH is not null)  update t_xw set [email protected],[email protected],[email protected],xgrq=getdate() where [email protected]_o and [email protected]_o and [email protected]_o else update t_xw set [email protected],[email protected]_o,[email protected],xgrq=getdate() where [email protected]_o and [email protected]_o and [email protected]_o end

----------------------------- if (@ZBBH<>@ZBBH_o OR ( @ZBBH is not null and @ZBBH_o is null ) ) begin  insert T_FIELDZT (HTH,TABLENAME,TABLEDESCRIPTION,FIELDNAME,FIELDDESCRIPTION,FIELDVALUE,RQ,XGRDM,XGRQ) values(@HTH, 'T_SXHT', '双向合同', 'ZBBH', '总部编号', @ZBBH, getdate(), @XGRDM, getdate()) end ---------------------------------- if UPDATE(XZH) begin select @changekey = 1 select @XZH = XZH from inserted select @XZH_o = XZH from deleted select @[email protected]+',小站号='+'"'+rtrim(coalesce(@XZH,''))+'"("'+rtrim(coalesce(@XZH_o,''))+'")' end if UPDATE(XXZH) begin select @changekey = 1 select @XXZH = XXZH from inserted select @XXZH_o = XXZH from deleted select @[email protected]+',新小站号='+'"'+rtrim(coalesce(@XXZH,''))+'"("'+rtrim(coalesce(@XXZH_o,''))+'")' end if UPDATE(HTJE) begin select @changekey = 1 select @HTJE= HTJE from inserted select @HTJE_o= HTJE from deleted select @[email protected]+',合同金额='+'"'+rtrim(convert(varchar(20),coalesce(@HTJE,0)))+'"("'+rtrim(convert(varchar(20),coalesce(@HTJE_o,0)))+'")' end if UPDATE(HBLB) begin select @changekey = 1 select @HBLB=HBLB from inserted select @HBLB_o=HBLB from deleted select @[email protected]+',货币类别='+'"'+rtrim(coalesce(@HBLB,''))+'"("'+rtrim(coalesce(@HBLB_o,''))+'")' end if UPDATE(HTRQ) begin select @changekey = 1 select @HTRQ=HTRQ from inserted select @HTRQ_o=HTRQ from deleted select @[email protected]+',合同日期='+'"'+rtrim(coalesce(@HTRQ,''))+'"("'+rtrim(coalesce(@HTRQ_o,''))+'")' end if UPDATE(FHRQ) begin select @changekey = 1 select @FHRQ=FHRQ from inserted select @FHRQ_o=FHRQ from deleted select @[email protected]+',发货日期='+'"'+rtrim(coalesce(@FHRQ,''))+'"("'+rtrim(coalesce(@FHRQ_o,''))+'")' end if UPDATE(XDRQ) begin select @changekey = 1 select @XDRQ=XDRQ from inserted select @XDRQ_o=XDRQ from deleted select @[email protected]+',下单日期='+'"'+rtrim(coalesce(@XDRQ,''))+'"("'+rtrim(coalesce(@XDRQ_o,''))+'")' end if UPDATE(AZRQ) begin select @changekey = 1 select @AZRQ=AZRQ from inserted select @AZRQ_o=AZRQ from deleted select @[email protected]+',安装日期='+'"'+rtrim(coalesce(@AZRQ,''))+'"("'+rtrim(coalesce(@AZRQ_o,''))+'")' end if UPDATE(SJRQ) begin select @changekey = 1 select @SJRQ=SJRQ from inserted select @SJRQ_o=SJRQ from deleted select @[email protected]+',升级日期='+'"'+rtrim(coalesce(@SJRQ,''))+'"("'+rtrim(coalesce(@SJRQ_o,''))+'")' end if UPDATE(TXCJ) begin select @changekey = 1 select @TXCJ=TXCJ from inserted select @TXCJ_o=TXCJ from deleted select @[email protected]+',天线厂家='+'"'+rtrim(coalesce(@TXCJ,''))+'"("'+rtrim(coalesce(@TXCJ_o,''))+'")' end if UPDATE(XZLB) begin select @changekey = 1 select @XZLB=XZLB from inserted select @XZLB_o=XZLB from deleted select @[email protected]+',小站类别='+'"'+rtrim(coalesce(@XZLB,''))+'"("'+rtrim(coalesce(@XZLB_o,''))+'")' end if UPDATE(XZZT) begin select @changekey = 1 select @XZZT=XZZT from inserted select @XZZT_o=XZZT from deleted select @[email protected]+',状态='+'"'+rtrim(coalesce(@XZZT,''))+'"("'+rtrim(coalesce(@XZZT_o,''))+'")' end if UPDATE(XWS) begin select @changekey = 1 select @XWS=XWS from inserted select @XWS_o=XWS from deleted select @[email protected]+',席位数='+'"'+rtrim(coalesce(@XWS,0))+'"("'+rtrim(coalesce(@XWS_o,0))+'")' end if UPDATE(JTHTH) begin select @changekey = 1 select @JTHTH=JTHTH from inserted select @JTHTH_o=JTHTH from deleted select @[email protected]+',集团合同号='+'"'+rtrim(coalesce(@JTHTH,''))+'"("'+rtrim(coalesce(@JTHTH_o,''))+'")' end if UPDATE(BPSL) begin select @changekey = 1 select @BPSL=BPSL from inserted select @BPSL_o=BPSL from deleted select @[email protected]+',报盘速率='+'"'+rtrim(coalesce(@BPSL,''))+'"("'+rtrim(coalesce(@BPSL_o,''))+'")' if (@BPSL<>@BPSL_o OR ( @BPSL is not null and @BPSL_o is null ) ) begin  insert T_FIELDZT (HTH,TABLENAME,TABLEDESCRIPTION,FIELDNAME,FIELDDESCRIPTION,FIELDVALUE,RQ,XGRDM,XGRQ) values(@HTH, 'T_SXHT', '双向合同', 'BPSL', '报盘速率', @BPSL, getdate(), @XGRDM, getdate()) end end if UPDATE(BPBS) begin select @changekey = 1 select @BPBS=BPBS from inserted select @BPBS_o=BPBS from deleted select @[email protected]+',报盘笔数='+'"'+rtrim(coalesce(@BPBS,''))+'"("'+rtrim(coalesce(@BPBS_o,''))+'")' if (@BPBS<>@BPBS_o OR ( @BPBS is not null and @BPBS_o is null ) ) begin  insert T_FIELDZT (HTH,TABLENAME,TABLEDESCRIPTION,FIELDNAME,FIELDDESCRIPTION,FIELDVALUE,RQ,XGRDM,XGRQ) values(@HTH, 'T_SXHT', '双向合同', 'BPBS', '报盘笔数', @BPBS, getdate(), @XGRDM, getdate()) end end if UPDATE(RCST) begin select @changekey = 1 select @RCST=RCST from inserted select @RCST_o=RCST from deleted select @[email protected]+',RCST序列号='+'"'+rtrim(coalesce(@RCST,''))+'"("'+rtrim(coalesce(@RCST_o,''))+'")' if (@RCST<>@RCST_o OR ( @RCST is not null and @RCST_o is null ) ) begin  insert T_FIELDZT (HTH,TABLENAME,TABLEDESCRIPTION,FIELDNAME,FIELDDESCRIPTION,FIELDVALUE,RQ,XGRDM,XGRQ) values(@HTH, 'T_SXHT', '双向合同', 'RCST', 'RCST序列号', @RCST, getdate(), @XGRDM, getdate()) end end if UPDATE(BUG) begin select @changekey = 1 select @BUG=BUG from inserted select @BUG_o=BUG from deleted select @[email protected]+',BUG序列号='+'"'+rtrim(coalesce(@BUG,''))+'"("'+rtrim(coalesce(@BUG_o,''))+'")' if (@BUG<>@BUG_o OR ( @BUG is not null and @BUG_o is null ) ) begin  insert T_FIELDZT (HTH,TABLENAME,TABLEDESCRIPTION,FIELDNAME,FIELDDESCRIPTION,FIELDVALUE,RQ,XGRDM,XGRQ) values(@HTH, 'T_SXHT', '双向合同', 'BUG', 'BUG序列号', @BUG, getdate(), @XGRDM, getdate()) end end if UPDATE(SBSJRQ) begin select @changekey = 1 select @SBSJRQ=SBSJRQ from inserted select @SBSJRQ_o=SBSJRQ from deleted select @[email protected]+',设备升级日期='+'"'+rtrim(coalesce(@SBSJRQ,''))+'"("'+rtrim(coalesce(@SBSJRQ_o,''))+'")' if (@SBSJRQ<>@SBSJRQ_o OR ( @SBSJRQ is not null and @SBSJRQ_o is null ) ) begin  insert T_FIELDZT (HTH,TABLENAME,TABLEDESCRIPTION,FIELDNAME,FIELDDESCRIPTION,FIELDVALUE,RQ,XGRDM,XGRQ) values(@HTH, 'T_SXHT', '双向合同', 'SBSJRQ', '设备升级日期', @SBSJRQ, getdate(), @XGRDM, getdate()) end end if (@changekey=1) begin  insert T_LOG (XGRDM,CZDX,CZLX,CZNR,CZSJ) values(@XGRDM,'双向合同','修改',@c1,getdate()) end END 似乎看起来太费眼了啊

如果不是及时查询,把数据库日志模式设置成大容量,然后使用Log Explorer 查看日志就可以了 如果是想在应用软件中随时查询这种改变,那么确实就需要使用触发器。 一般来说,仅仅是数据库管理员看的,就没必要使用触发器了。最好使用Log Explorer 看日志的模式

这个在哪个地方设置,我没找到啊

关注 接分

关注 接分

上一篇:请各位大侠帮帮忙 20feixianxxx]
下一篇:推荐下SQL Server 2005入门的好书 20feixianxxx]

相关文章

相关评论