拦截数据库增删改操作
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
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
相关文章推荐
- JavaScript无刷新操作(数据库记录的加载删改)
- Javascript无刷新操作(数据库记录的加载删改)
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
- 10.Django数据库操作(增删改)
- discuz学习笔记:以easyUI DataGrid为前台进行数据库增查删改操作
- Nhibernate (1) 操作数据库 增删改
- SQL操作数据库,创建数据库,查看所有的数据库,对数据库进行增删改,查看当前使用的数据库
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
- JDBC增删改数据库的操作
- 如何将对数据库两个表的操作处于用一个事物下?同一个连接对象+事物拦截
- Hibernate的问题--增删改不录数据库,页面上能够显示当时操作效果
- PreparedStatemnet预编译操作数据库的增删改
- 如何使用Ado.net对数据库进行增删改操作
- 3.22数据库基础知识:①数据类型②基本规则③数据库基本操作,增删改库,表
- 拦截并记录数据库操作-Logging and Intercepting Database Operations
- Ext 2.0.1 Grid 增删改 & DWR 1 实例 - 操作数据库版本(带源码) (beansoft)
- .NET数据库增删改操作及批量处理
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
- 数据库增删改操作(DML)
- 多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步?