日期:2014-05-19  浏览次数:20638 次

|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