怎么跟踪数据库做了哪些改变? 公司有个生产管理系统,我在生产计划表里某个成品的“交货期”字段输入一个数值,并登陆到数据库,我想知道数据库里都影响了哪些表的哪些记录的哪些值,这个难不难? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果跟踪数据库的改变用 DDL触发器.如果是数据变化 用DML 触发器 如果是跟踪数据库变化.建一个DDL触发器即可!USE 数据库;GOCREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));GOCREATE TRIGGER log ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS ASDECLARE @data XMLSET @data = EVENTDATA()INSERT ddl_log (PostTime, DB_User, Event, TSQL) VALUES (GETDATE(), CONVERT(nvarchar(100), CURRENT_USER), @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;GO--Test the triggerCREATE TABLE TestTable (a int)DROP TABLE TestTable ;GOSELECT * FROM ddl_log ;GO--结果/*PostTime DB_User Event TSQL---------------------------------- ------------------ ----------------- ---------------------------------2006-04-26 18:54:26.200 dbo CREATE_TABLE CREATE TABLE TestTable (a int) 2006-04-26 18:54:26.200 dbo DROP_TABLE DROP TABLE TestTable ; */ 二楼,再次谢谢你。但是你输出的TSQL字段只有“CREATE”、“DROP TABLE”吗?没有完整的sql语句? --是完整的DDL脚本啊. CREATE TABLE TestTable (a int) DROP TABLE TestTable ; --如果是DML 操作. 也只能给每一个表建触发器了.--用sp_msforeachtable 批量建触发器 服务器: 消息 170,级别 15,状态 1,过程 log,行 3第 3 行: 'DDL_DATABASE_LEVEL_EVENTS' 附近有语法错误。服务器: 消息 195,级别 15,状态 1,过程 log,行 6'EVENTDATA' 不是可以识别的 函数名。服务器: 消息 170,级别 15,状态 1,过程 log,行 12第 12 行: '.' 附近有语法错误。 --DDL 是SQL Server 2005 提供的新的支持.--DML 在 SQL Server 2000 中支持. DDL触发器是否只有在SQLSERVER2005中有? 怎么“天才”也和我有相同的问题吗?二楼,我们公司用的是SQL SERVER 2000,我先自己看看DML相关,你如果有时间,可以将2000下面的方法贴一下吗?只要我知道我的一个操作在数据库里影响了哪些东西(SQL 语句)就可以了。 事件探察器是可以,但是事件探察器只能针对SQL实例跟踪(比如我要跟踪数据库A,但事件探察器连数据库B的相关操作也跟踪了),探察出来的很多东西我都不需要,我要在里面搜索才能找到我要的,比较麻烦。 我发这个帖子的目的是这样的:我想知道我的一个操作被我们公司的ERP系统执行了哪些操作,知道后我可以在二次开发程序里面达到相同的目的而绕过ERP。 TO:楼主 事件探察器可以设置过滤条件的。设置之后,探察出来的很多东西都是你需要的还有第三方工具LOG Explorer挺好用的! 求一sql改写成带参数存储过程 求一 简单学习型存储过程 请教个select的同时updata的问题。 SQL SERVER 2008 EXPRESS 客户端问题 net stop mssqlserver 问题 关于sp_attach_db的问题!我好急!谢谢各位了! 如何在Linux下C编程链接读写MS SQL Server? xp 能否安装SQL2000啊 绝对初学问题,问一条语句 关于SQL2000导出数据到EXCEL2007的问题 SET NOCOUNT 的问题!谢谢! 来看看这个题~如果你认为你的数据库基础很好的话
如果是数据变化 用DML 触发器
GO
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
GO
CREATE TRIGGER log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log
(PostTime, DB_User, Event, TSQL)
VALUES
(GETDATE(),
CONVERT(nvarchar(100), CURRENT_USER),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
--Test the trigger
CREATE TABLE TestTable (a int)
DROP TABLE TestTable ;
GO
SELECT * FROM ddl_log ;
GO
--结果/*
PostTime DB_User Event TSQL
---------------------------------- ------------------ ----------------- ---------------------------------
2006-04-26 18:54:26.200 dbo CREATE_TABLE CREATE TABLE TestTable (a int)
2006-04-26 18:54:26.200 dbo DROP_TABLE DROP TABLE TestTable ;
*/
但是你输出的TSQL字段只有“CREATE”、“DROP TABLE”吗?没有完整的sql语句?
第 3 行: 'DDL_DATABASE_LEVEL_EVENTS' 附近有语法错误。
服务器: 消息 195,级别 15,状态 1,过程 log,行 6
'EVENTDATA' 不是可以识别的 函数名。
服务器: 消息 170,级别 15,状态 1,过程 log,行 12
第 12 行: '.' 附近有语法错误。
--DDL 是SQL Server 2005 提供的新的支持.
--DML 在 SQL Server 2000 中支持.
二楼,我们公司用的是SQL SERVER 2000,我先自己看看DML相关,你如果有时间,可以将2000下面的方法贴一下吗?
只要我知道我的一个操作在数据库里影响了哪些东西(SQL 语句)就可以了。
我想知道我的一个操作被我们公司的ERP系统执行了哪些操作,知道后我可以在二次开发程序里面达到相同的目的而绕过ERP。
事件探察器可以设置过滤条件的。设置之后,探察出来的很多东西都是你需要的
还有第三方工具LOG Explorer挺好用的!