Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy wyzwalacz może znaleźć nazwę procedury składowanej, która zmodyfikowała dane?

możesz spróbować:CONTEXT_INFO

oto przykład użycia CONTEXT_INFO:

w każdej procedurze wykonującej wstawianie/usuwanie/aktualizację, którą chcesz śledzić, dodaj to:

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

oto część wyzwalacza do pobrania wartości:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MS Access ODBC — wywołanie nie powiodło się. Nieprawidłowa wartość znaku dla specyfikacji rzutowania (#0)

  2. Wyszukiwanie pełnotekstowe nie działa, jeśli dołączono słowo zatrzymania, mimo że lista słów zatrzymania jest pusta

  3. Usuń wszystkie znaki po pierwszej spacji w SSRS 2005

  4. Scal dwie tabele / połącz wartości w jedną kolumnę

  5. Zapytanie działa wolno z wyrażeniem daty, ale szybko z literałem ciągu