>php教程 >PHP开发 >데이터베이스 트리거는 트리거를 트리거하는 SQL 문을 가져옵니다.

데이터베이스 트리거는 트리거를 트리거하는 SQL 문을 가져옵니다.

高洛峰
高洛峰원래의
2016-12-14 16:33:451233검색

--트리거

ALTER TRIGGER TR_StandardLog ON T_Standard

FOR INSERT,DELETE,UPDATE

AS


--ROWCNT

DECLARE @ROWS INT

SET @ROWS=@@ROWCOUNT


SET NOCOUNT ON


--SQL은 실행된 SQL 문을 저장합니다.

CREATE TABLE #T (

EVENTTYPE VARCHAR(20),

PARAMETERS INT,

EVENTINFO VARCHAR(300)

)


-- SQL 문 가져오기
DECLARE @SPID VARCHAR(20)

SET @SPID=CAST(@@SPID AS VARCHAR)

- - OPTYPE

@OPTYPE INT 선언

SET @OPTYPE=2 >         3                                                                            🎜>
존재하지 않는 경우(삭제된 항목에서 1개 선택) @OPTYPE 설정 =1 --INSERT

IF @OPTYPE=1
BEGIN
​​​​INSERT INTO T_StandardLog(SqlText,OPTYPE,CreateTime)
SELECT 'INSERT INTO TBWEIGH(WEIGHID,FID,CARDNO,STDNNO,PRONAME,PROMODEL,UNIT_FROM,UNIT_TO, 운송,운전자,'
+'패키지,총중량,용기중량,순중량,공제,실질중량, 가격,금액,단위,총시간,'
                              +'용기_시간, NET_TIME, 편집_시간, OPMAN_GROSS,OPMAN_TARE,OPMAN,EDITMAN, SCALENAME_GROSS,'SCALENAME_TARE,'                                             사용자,REMARK,ISCANCELED,CREATETIME)'
           +'VALUES(:WEIGHID,'''+isnu ll(cast(A.F_ID as nvarchar(18)),'null') +'' ','''+isnull(A.F_CardNo,'null')+ ''','''+isnull(A.F_StdNo,'null')+''','''+isnull(A.F_ProName, 'null')+''','''+isnull(A.F_ProModel,'null')+''','''+isnull(A.F_unitFrom,'null')+''',''' +isnull(A.F_UnitTo,'null')+''',' ''
                 +isnull(A.F_Transport,'null')+''','''+isnull(A.F_Driver,'null ')+''','''+isnull(A.F_Memo, 'null')+''','+isnull(cast(A.F_Gross as nvarchar(30)),'null')+',' +isnull(cast(A.F_Tare as nvarchar(30)),'null ')+','
+isnull(cast(A.F_Net as nvarchar(30)),'null')+','+ isnull(cast(A.F_Deduct as nvarchar(30)),'null' )+','+isnull(cast(A.F_Fact as nvarchar(30)),'null')+','
      +isnull (cast(A.F_Price as nvarchar(30)),'null') +','+isnull(cast(A.F_Money as nvarchar(30)),'null')+','''+isnull(A .F_Unit,'null')+''','''+isnull (cast(A.F_GrossTime as nvarchar(30)),'null')+''','''
            +isnull(cast(A.F_TareTime as nvarchar(30)),'null')+''','''+isnull(cast(A.F_NetTime as nvarchar(30)),'null')+''' ,'''+isnull(cast(A.F_edTime as nvarchar(30)),'null')+''','''
            +isnull(A.F_opManGross,'null')+''', '''+isnull(A.F_opManTare,'null')+''','''+isnull(A.F_opMan,'null')+''','''+isnull(cast(A.F_edTime as nvarchar(30)),'null')+''','''+isnull(A.F_ScaleNameGross,'null')+''','''+isnull(A.F_ScaleNameTare,'null')+' '','''
            +isnull(A.F_ScaleNameNet,'null')+''',sysdate,:UserID,:Remark,'+isnull(cast(A.F_IsCancel as nvarchar(1)),' null')+',:CREATETIME'
            +');','INSERT',GETDATE()
       FROM INSERTED A
    END
  ELSE IF @OPTYPE=3 OR @OPTYPE=2
    시작
       INSERT #T EXEC('DBCC INPUTBUFFER ('+@SPID+')')
       INSERT INTO T_StandardLog(SqlText,OPTYPE,CreateTime) --把执行的sql语句存储재临时表中
       T.EVENTINFO,CASE @OPTYPE WHEN 1 THEN 'INSERT' WHEN 2 THEN 'UPDATE' WHEN 3 THEN 'DELETE' ELSE ''END,GETDATE() FROM #T T   --从临时表中提取触发的sql语句
    END

GO
QUOTED_IDENTIFIER 설정 끄기 
GO
ANSI_NULLS 설정 ON 
GO


触发器会把数据临时存储삽입된 상태와 삭제된 상태表中,삽입 및 삭제됨表是逻辑表,只有在触发器中才存在,触发器结束了,就会自动删除,如果是insert操作,则新添加的数据存储在inserted表中,如果是update操작작,其实数当于先删除然后再插入,即在삭제됨表中记录原来的记录,현재삽입됨表中记录更新后的数据,如果是deleted操,则删除的数据被记录이삭제되었습니다表中。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.