sql >> データベース >  >> RDS >> Sqlserver

トリガーが、データを変更したストアド プロシージャの名前を見つけることは可能ですか?

    あなたが試すことができます:CONTEXT_INFO

    CONTEXT_INFO の使用例は次のとおりです:

    追跡したい挿入/削除/更新を行うすべての手順で、これを追加します:

    DECLARE @string        varchar(128)
           ,@CONTEXT_INFO  varbinary(128)
    SET @string=ISNULL(OBJECT_NAME(@@PROCID),'none')
    SET @CONTEXT_INFO =cast('Procedure='[email protected]+REPLICATE(' ',128) as varbinary(128))
    SET CONTEXT_INFO @CONTEXT_INFO
    
    --do insert/delete/update that will fire the trigger
    
    SET CONTEXT_INFO 0x0 --clears out the CONTEXT_INFO value
    

    値を取得するためのトリガーの部分は次のとおりです:

    DECLARE @string         varchar(128)
           ,@sCONTEXT_INFO  varchar(128)
    SELECT @sCONTEXT_INFO=CAST(CONTEXT_INFO() AS VARCHAR) FROM master.dbo.SYSPROCESSES WHERE [email protected]@SPID
    
    IF LEFT(@sCONTEXT_INFO,9)='Procedure'
    BEGIN
        SET @string=RIGHT(RTRIM(@sCONTEXT_INFO),LEN(RTRIM(@sCONTEXT_INFO))-10)
    END
    ELSE
    BEGIN --optional failure code
        RAISERROR('string was not specified',16,1)
        ROLLBACK TRAN
        RETURN
    END
    
    ..use the @string
    


    1. オラクル。日付と時刻を出力する方法は?

    2. RACでのASHシーケンスの競合の特定

    3. MySQLはミリ秒フィールドからフォーマットされた日付を選択します

    4. EMグリッド制御を新しいノードに拡張