您的位置:首页 > 数据库

拦截数据库增删改操作

2014-11-20 12:17 281 查看
sp_who2 @@spid

SELECT program_name

FROM sys.sysprocesses

WHERE spid = @@spid

CREATE TABLE test

(

id INT IDENTITY(1, 1)

PRIMARY KEY ,

name VARCHAR(20)

)

GO

INSERT INTO test

VALUES ( 'a' ),

( 'b' ),

( 'c' )

GO

DROP TABLE testlog;

CREATE TABLE testlog

(

lid INT IDENTITY(1, 1)

PRIMARY KEY ,

tid INT ,

tname1 VARCHAR(20) ,

tname2 VARCHAR(20) ,

type VARCHAR(20) ,

host_name VARCHAR(200) ,

program_name VARCHAR(200)

);

;

ALTER TRIGGER tr_getlog ON test

FOR INSERT, UPDATE, DELETE

AS

BEGIN

SET NOCOUNT ON;

DECLARE @program_name VARCHAR(200) ,

@host_name VARCHAR(200)

SELECT @program_name = RTRIM(program_name),

@host_name = RTRIM(hostname)

FROM sys.sysprocesses

WHERE spid = @@spid

IF @host_name = 'PC00425'

BEGIN

ROLLBACK;

RETURN;

END

INSERT testlog ( tid, tname1, tname2, type, host_name, program_name )

SELECT ISNULL(a.id, b.id) AS id, a.name, b.name,

( CASE WHEN b.name IS NULL

AND a.name IS NOT NULL THEN 'insert'

WHEN a.name IS NULL

AND b.name IS NOT NULL THEN 'delete'

ELSE 'update'

END ) AS type, @host_name, @program_name

FROM inserted a

FULL JOIN deleted b ON a.id = b.id

END

SELECT *

FROM test

DELETE TOP ( 1 )

FROM test

SELECT *

FROM testlog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: