Như Jonas nói, Hồ sơ là lựa chọn tốt nhất của bạn (và là lựa chọn duy nhất cho các truy vấn CHỌN). Đối với CHÈN, CẬP NHẬT, XÓA, cách gần nhất bạn có thể nhận được mà không có Trình biên dịch có thể là xem bộ đệm đầu vào thông qua DBCC INPUTBUFFER(@@SPID)
. Điều này sẽ chỉ hoạt động cho các sự kiện ngôn ngữ đặc biệt, không phải lệnh gọi RPC và sẽ chỉ hiển thị cho bạn 256 ký tự đầu tiên của câu lệnh SQL (tôi tin rằng tùy thuộc vào phiên bản). Một số mã ví dụ, (chạy dưới dạng 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