如何找出所有对象发生的变化

时间:2013-07-30 14:21:25

标签: sql-server-2008 tsql

如何找出数据库中发生的变化,如修改函数,表索引,过程以及添加或删除列。

此查询中的

select * from sys.objects
where type IS NOT NULL
and modify_date between '2013-07-21' and '2013-07-29'  

但是我在这里得到创建的对象列表和修改列表,但是如果我删除了任何对象,它就没有显示任何内容。

如何在特定日期之间获取数据库中发生的所有更改?

2 个答案:

答案 0 :(得分:0)

尝试SQL的源代码管理解决方案。我之前使用过RedGate的SQL Source Control,它记录了这样的变化历史,包括谁做出了改变,以及改变了什么。

http://www.red-gate.com/products/sql-development/sql-source-control/

它有点贵,但它很好。我不知道是否有办法(特别是删除)只使用SQL本身。

答案 1 :(得分:0)

其中许多事件都记录在the default trace

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT 
  LoginName,
  HostName,
  StartTime,
  ObjectName,
  TextData -- may or may not be populated
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass IN
(
  164,  -- object:altered
  46,   -- object:created
  47    -- object:deleted
)
AND StartTime >= '20130721' AND StartTime < '20130730';

Why you should never use BETWEEN for date range queries