Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pernyataan SQL dari Pemicu DML

Seperti yang dikatakan Jonas, Profiler adalah opsi terbaik Anda (dan satu-satunya opsi untuk kueri SELECT). Untuk INSERT, UPDATE, DELETE, yang paling dekat yang bisa Anda dapatkan tanpa Profiler mungkin dengan melihat buffer input melalui DBCC INPUTBUFFER(@@SPID) . Ini hanya akan berfungsi untuk acara bahasa ad-hoc, bukan panggilan RPC, dan hanya akan menunjukkan kepada Anda 256 karakter pertama dari pernyataan SQL (tergantung pada versi, saya percaya). Beberapa contoh kode, (jalankan sebagai 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. Beberapa Koneksi Dengan String Koneksi Yang Sama Dalam Satu Transaksi, Transaksi Ditingkatkan?

  2. SQL- Dapatkan substring setelah spasi pertama dan spasi kedua di kolom terpisah

  3. T-SQL Bagaimana memberikan peran kepada pengguna

  4. Bagaimana cara menjalankan paket SSIS 32 bit dalam paket 64bit?

  5. Versi SQL Server yang digunakan tidak mendukung tipe data datetime2?