ホームページ >php教程 >PHP开发 >データベース トリガーは、トリガーをトリガーする SQL ステートメントを取得します。

データベース トリガーは、トリガーをトリガーする SQL ステートメントを取得します。

高洛峰
高洛峰オリジナル
2016-12-14 16:33:451234ブラウズ

--トリガー

ALTER TRIGGER TR_StandardLog ON T_Standard

FOR INSERT,DELETE,UPDATE

AS


--ROWCNT

RE @ROWS INT

@ROWS=@@ROWCOUNT を設定します


NOCOUNT をオンに設定します


--SQL は実行された SQL ステートメントを保存します

CREATE TABLE #T (

EVENTTYPE VARCHAR(20),

PARAMETERS INT,

EVENTINFO VARCHAR(300)

)


--Getステートメント
宣言する@SPID VARCHAR(20)

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

--OPTYPE

DECLARE @OPTYPE INT

SET @OPTYPE=2存在しません (挿入されたものから 1 つを選択) SET @OPTYPE= 3 --DELETE

IF NOT (DELETED から 1 を選択) SET @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,TRANSPORT,DRIVER,'
' +'PACKAGE,GROSS_WEIGHT,TARE_WEIGHT,NET_WEIGHT,DEDUCT,FACT_WEIGHT,PRICE,AMOUNT,UNIT,GROSS_TIME)'
+ 'VALUES(:WEIGHID,'' '+isnull(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
BEGIN
INSERT #T EXEC('DBCC INPUTBU FFER (' +@SPID+')')
INSERT INTO T_StandardLog(SqlText,OPTYPE,CreateTime) -- 実行の SQL 语句が時間表中に保存されています
SELECT 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
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


触発デバイスは、挿入および削除されたテーブルにデータを一時的に保存します。挿入および削除されたテーブルは、トリガー内にのみ存在し、トリガーが終了し、挿入操作の場合は自動的に削除され、新しく追加されたデータが保存されます。挿入されたテーブルでは、更新操作の場合は、先に削除されてから再挿入されます。つまり、削除されたテーブルでは、更新されたデータが記録され、挿入されたテーブルでは、更新されたデータが記録されます。削除された操作の場合は、削除されたデータが記録されます。削除されたテーブル内にあります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。