Come dice Jonas, Profiler è la tua migliore opzione (e l'unica opzione per le query SELECT). Per INSERT, UPDATE, DELETE, il più vicino che puoi ottenere senza Profiler potrebbe essere guardare il buffer di input tramite DBCC INPUTBUFFER(@@SPID)
. Funzionerà solo per eventi linguistici ad hoc, non per chiamate RPC, e ti mostrerà solo i primi 256 caratteri dell'istruzione SQL (a seconda della versione, credo). Qualche codice di esempio, (eseguito come 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