Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL израз от DML Trigger

Както казва Джонас, Profiler е най-добрата ви опция (и единствена опция за SELECT заявки). За INSERT, UPDATE, DELETE, най-близкото, което можете да получите без Profiler, може да бъде да погледнете входния буфер чрез DBCC INPUTBUFFER(@@SPID) . Това ще работи само за ad-hoc езикови събития, а не за RPC извиквания, и ще ви покаже само първите 256 знака от SQL оператора (в зависимост от версията, вярвам). Примерен код (изпълнява се като dbo):

CREATE TABLE TBL (a int, b varchar(50))
go

INSERT INTO TBL SELECT 1,'hello'
INSERT INTO TBL SELECT 2,'goodbye'
go

GRANT SELECT, UPDATE ON TBL TO guest
go

CREATE TABLE AUDIT (    audittime datetime default(getdate())
                    ,   targettable sysname
                    ,   loginname sysname
                    ,   spid int
                    ,   sqltext nvarchar(max))
go

CREATE TRIGGER TR_TBL ON TBL FOR INSERT, UPDATE, DELETE
AS BEGIN
    CREATE TABLE #DBCC (EventType varchar(50), Parameters varchar(50), EventInfo nvarchar(max))

    INSERT INTO #DBCC
    EXEC ('DBCC INPUTBUFFER(@@SPID)')

    INSERT INTO AUDIT (targettable, loginname, spid, sqltext)
        SELECT  targettable =   'TBL'
        ,       suser       =   suser_name()
        ,       spid        =   @@SPID
        ,       sqltext     =   EventInfo 
        FROM #DBCC
END
GO

/* Test the Audit Trigger (can be run as guest) */
UPDATE TBL SET a = 3 WHERE a = 2


  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 - SQL Server / TSQL урок, част 85

  2. Как да сравним датите в SQL Server

  3. В реферираната таблица няма първични или кандидат-ключове, които да съответстват на списъка с референтни колони във външния ключ

  4. Стойността на колоната за идентичност изведнъж скача до 1001 в sql сървъра

  5. HAS_DBACCESS() – Открийте дали потребителят има достъп до база данни в SQL Server