sql >> Database teknologi >  >> RDS >> Sqlserver

Er det muligt for en trigger at finde navnet på den lagrede procedure, der ændrede data?

du kan prøve:CONTEXT_INFO

her er et CONTEXT_INFO-brugseksempel:

i hver procedure, der udfører den indsættelse/sletning/opdatering, som du vil spore, skal du tilføje dette:

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

her er den del af triggeren til at hente værdien:

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. mysqli_stmt::bind_param():Antallet af elementer i typedefinitionsstrengen matcher ikke antallet af bindevariabler

  2. SQL Sammenlign varchar-variabel med en anden varchar-variabel

  3. SailsJS - Hvordan specificerer man strengattributtlængde uden at få fejl ved oprettelse af post?

  4. MySQL vælg kolonnenavn og værdi som et felt