系统中需要记录数据log,我写了一个update触发器,对表数据的任何修改,都会insert log表。但批量update时,非常慢。sqlserver中有没有oracle中的语句级触发器。
这个问题怎么解决?

解决方案 »

  1.   

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go-- =============================================
    -- Author: <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description: <Description,,>
    -- =============================================
    ALTER TRIGGER [D40_TRIGGER_UPD]
       ON  [dbo].[TBL_D40_JUTYU]
       AFTER UPDATE
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;    -- Insert statements for trigger here
    INSERT INTO TBL_L40_JUTYU
    SELECT D.[D40_JUTYUU_NO]
          ,D.[D40_JUTYUU_DATE]
          ,D.[D40_TOKUISAKI_CD]
          ,D.[D40_TOKUI_NAME]
          ,D.[D40_TOKUI_TANTOU_NAME]
          ,D.[D40_KYOTEN_CD]
          ,D.[D40_BUMON_CD]
          ,D.[D40_TANTOU_CD]
          ,D.[D40_NOUNYU_CD]
          ,D.[D40_NOUNYU_NAME]
          ,D.[D40_KOUJI_NAME]
          ,D.[D40_KYOUSEI_KANRYOU_KBN]
          ,D.[D40_ORDER]
          ,D.[D40_ITEM]
          ,D.[D40_REQNO]
          ,D.[D40_REQNO_YOUKYU]
          ,D.[D40_REQNO_SIYOU]
          ,D.[D40_QC_KBN]
          ,D.[D40_KENSA_KBN]
          ,D.[D40_NOUKI]
          ,D.[D40_NOUNYUU_HOHO_KBN]
          ,D.[D40_JUTYUU_TORIKOMI_KBN]
          ,D.[D40_JUTYUU_TORIKOMI_LIST]
          ,D.[D40_CHECKLIST_HAKKOU]
          ,D.[D40_JUTYUUHYOU_HAKKOU]
          ,D.[D40_NOUHINSYO_HAKKOU]
          ,D.[D40_HATTYUU_YOTEI_HAKKOU]
          ,D.[D40_DENPYOU_DATE]
          ,D.[D40_CHECKLIST_DATE]
          ,D.[D40_JUTYUUHYOU_DATE]
          ,D.[D40_NOUHINSYO_DATE]
          ,D.[D40_HATTYUU_YOTEI_DATE]
          ,D.[D40_MITUMORI_NO]
          ,D.[D40_TOKKYUU_KBN]
          ,D.[D40_TEKIYOU]
          ,D.[D40_JYUTYUU_KANRYOU_KBN]
          ,D.[D40_JYUTYUU_TORIKOMI_KAKUNIN_KBN]
          ,D.[D40_NYUURYOKU_TANTOU_CD]
          ,'E'
          ,GETDATE()
          ,I.[D40_KOUSIN_CD]
          ,I.[D40_KOUSIN_PG]
     FROM DELETED D, INSERTED IEND
      

  2.   

    是保存每次修改前还是修改后:
     DELETED D, INSERTED I
      

  3.   

    修改前的数据需要保存。?
     DELETED 调用这个表就行了
      

  4.   

    慢的主要原因是因为使用了INSERTED I?
      

  5.   

    需要加上WHERE D.[D60_DENPYOU_NO] = I.[D60_DENPYOU_NO]