0

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

在此查询中

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

但是在这里我得到了创建的对象列表和修改列表,但是如果我删除了任何对象,它不会显示任何东西。

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

4

2 回答 2

0

尝试 SQL 的源代码控制解决方案。我以前用过 RedGate 的 SQL 源代码控制,它记录了这样的更改历史,包括谁进行了更改,以及更改了什么。

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

它有点贵,但它很好。我不知道是否有办法仅使用 SQL 本身来做到这一点(尤其是删除)。

于 2013-07-30T14:27:29.240 回答
0

许多此类事件都记录在默认跟踪中。

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';

为什么你不应该使用BETWEEN日期范围查询

于 2013-07-30T14:37:39.897 回答