Sqlserver
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създам резюме, като се присъединя към една таблица с SQL Server?

  2. SQL Server - използване на CASE в клаузата WHERE

  3. SQL – Преобразуването на тип данни varchar в тип данни за дата и час води до стойност извън диапазона

  4. Как да добавя низ със стойност за автоматично увеличение в SQL Server?

  5. Актуализиране на внедрения SSIS пакет