读书人

|M| 怎么让SQL数据库的每一步操作自动

发布时间: 2012-03-07 09:13:51 作者: rapoo

|M| 如何让SQL数据库的每一步操作自动生成SQL语句
如:我表
tab1
id name
1 A
我更改为
id name
1 B
自动生成语句
update tab1 set name=B where id=1
其他的添加和删除也有相应的SQL
让他们存在一个
tab2中

id sql
1 update tab1 set name=B where id=1
...

谢谢

[解决办法]
1、看sql的事件探查器是不是你要的
2、可以考虑用触发器

[解决办法]
关于触发器实现,找了个以前的贴子,基本上回答的比较好
http://topic.csdn.net/t/20040804/23/3243457.html

[解决办法]
只能在每个表上都建立触发器
[解决办法]
create table TbLog(
Id int not null IDENTITY(1,1),
EvTime datetime not null default (getdate()), --访问时间
Sql varchar(3000), --执行的Sql语句
UserId varchar(50) not null default (sUSER_sname()), --连接的时候使用的哪个Sql登陆用户
HostName varchar(50) not null default (host_name()), --客户端的机器名
Ip varchar(50), --客户端的IP
LoginId varchar(50), --客户端的登陆用户(OS的用户)
AppName varchar(50) not null default(App_Name()), --是从查询分析器,还是应用程序来执行的
OpType int, --执行的是Select,Update,还是Delete操作
RowCnt int, --影响了多少行数据
Trans bit --是否启动了事务
)
go

--测试表
create table tbTest(
a int,
b varchar(10)
)
go

--触发器
create trigger tr_tbTest on tbTest
for insert,delete,update
as

--RowCnt
declare @Rows int
set @Rows=@@rowcount

set nocount on

--Sql
create table #t (
EventType varchar(20),
Parameters int,
EventInfo varchar(3000)
)

insert #t exec( 'DBCC INPUTBUFFER(@@SPID) ')

--OpType
declare @OpType int
set @OpType=2 --update
if not exists (select 1 from inserted) set @OpType=3 --delete
if not exists (select 1 from deleted) set @OpType=1 --delete

--Trans
declare @Trans bit
if @@TRANCOUNT> 0
set @Trans=1
else
set @Trans=0

--insert
insert tbLog (
Sql,
OpType,
RowCnt,
Trans
)
select EventInfo,
@OpType,
@Rows,
@Trans
from #t

go

--先在企业管理器输入两条记录
--a b
--1 1
--2 2

--再执行语句:
insert tbtest
values(3, '3 ')
go

insert tbtest
select a+3,b+ '3 ' from tbtest


go

BEGIN TRANSACTION

update tbtest
set a=100,b= '100 '
where a=3

COMMIT TRANSACTION
go

delete tbtest
where a=4
go

select * from tbTest
go

select * from tbLog
go

[解决办法]
觉得没这个必要吧,很麻烦的
[解决办法]
在触发器TRIGGER中,怎样判断是谁(程序、触发器、外键级联更新)触发的
Answer:
1)CREATE TABLE testTABLE ( ID INT)
CREATE TABLE spy(EventType NVARCHAR(30),Parameters INT,EventInfo NVARCHAR(255))

GO
CREATE TRIGGER Trg_Spy ON testTABLE
FOR INSERT,DELETE,UPDATE
AS
DECLARE @tmpSQL NVARCHAR(300)
SET @tmpSQL= 'DBCC INPUTBUFFER( '+CAST(@@SPID AS VARCHAR)+ ') '
INSERT INTO spy(eventType,Parameters,EventInfo)
EXEC (@tmpSQL)

[解决办法]
收藏
[解决办法]
查看日志吧

否则只能每个表建个上面的触发器了

读书人网 >SQL Server

热点推荐