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

|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. 在表上添加insert,update,delete触发器(SQL Server 2000只支持这几种触发器,如果是SQL Server 2005或者oracle还支持ddl触发器,就是create XXX之类的),在触发器里实现每次增删改的时候自动插入另一个表一条语句。但触发器使用的过多影响数据库性能
2. 使用SqlCommandBuilder的GetUpdateCommand().CommandText属性得到当前的SQL语句插入到表中,但这个是带参数的SQL语句,未必能满足楼主需求。
------解决方案--------------------
你可以到数据库论坛中去问问关于“触发器”的资料。对于数据变化的细节,使用触发器可以进行业务逻辑检查来禁止非法操作,也可以进行扩展的自定义动作,例如把改变前后的值都记录下来,或者例如当用户新增病例表的时候就自动产生诊断记录。
------解决方案--------------------
SQL Server 用触发器实现表的历史记录
http://bgming.cnblogs.com/archive/2005/10/10/251419.html
------解决方案--------------------
不知道楼主的目的是什么?

1、生成 update tab1 set name=B where id=1 这类的SQL语句。只要语句,只不执行这些语句是另一回事。

2、修改数据,有没有语句无所谓,只要一个表里的数据变了,另一个表里的也跟着变就可以了。


如果是 2 的话,那么用 ls说的触发器就可以了。
如果是 1 的话,可以使用 sysobjects(获取表名) 和 syscolumns(获取字段信息)里面的信息,来组合你需要的SQL语句。

tab2中 可以在家一个字段kind ,标识是 select、 update、delete 等里的哪一种。

id Kind sql


------解决方案--------------------
自动生成语句
update tab1 set name=B where id=1

========

这里的 B 是哪里来的呀。
------解决方案--------------------
B是用户重新输入的 那怎么写触发器呀。

晕了,你的目的到底是什么呢?
------解决方案--------------------
你在那里寫的這句update語句的時候用string SqL= "update tab1 set name= 'B ' where id=1 "
記錄下來再存入你的tab2這樣不可以嗎???


再一個SQL管理中有一個profiler可以監視你的數據所有的執行的數據操作記錄包括你想要的語句﹐你運行把記錄文保存即可﹗(要一直運行profiler)
------解决方案--------------------
获得表变更前后的记录
使用触发器
获得操作表记录的sql
使用事件探查器(ms sqlserver)
------解决方案--------------------
不用触发器也可以,偶就是用框架实现的...
------解决方案--------------------
事件探查器 Profiler