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