Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Câu lệnh SQL từ Trình kích hoạt DML

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hoạt động của OBJECTPROPERTY () trong SQL Server

  2. Cách cài đặt SQL Server trên Linux

  3. Cách tính tuổi (theo năm) dựa trên Ngày sinh và getDate ()

  4. Lấy và cài đặt Microsoft SQL Server Management Studio

  5. Không thể tải SqlServerSpatial.dll