表的数据有变化,想知道是谁执行什么样的SQL语句,可以通过Trigger实现,相关执行SQL的信息可以存放到表里。
首先,建一张Table:
CREATE TABLE [dbo].[LOGR](
[USRNAM] [varchar](50) NULL,
[STATMT] [varchar](max) NULL,
[UPDDAT] [datetime] NULL,
[TBLNAM] [varchar](50) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
然后,在需要记录的表上创建Trigger,以便记录INSERT,UPDATE或DELETE语句:
CREATE TRIGGER [dbo].[Trigger_Name] ON [dbo].[Table_Name]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @CLIENT AS VARCHAR(50)
DECLARE @DATETIME AS DATETIME
DECLARE @USERNAME AS VARCHAR(50)
DECLARE @STATMT AS VARCHAR(max)
DECLARE @strSQL AS VARCHAR(100)
SET @CLIENT = HOST_NAME()
SET @DATETIME = GETDATE()
SET @strSQL='DBCC INPUTBUFFER('+CAST(@@SPID AS VARCHAR(20))+')'
CREATE TABLE #STATEMENT (C1 VARCHAR(50),C2 VARCHAR(50),C3 VARCHAR(500))
INSERT INTO #STATEMENT EXEC(@strSQL)
SELECT @STATMT=C3 FROM #STATEMENT
INSERT INTO LOGR(USRNAM,STATMT,UPDDAT,TBLNAM) VALUES(@CLIENT,@STATMT,@DATETIME,'Table_Name')
效果如下图,相关操作均记录在表里: