我需要审核对数据库所做的DDL更改。这些更改需要在以后的许多其他数据库中复制。我在这里发现,可以启用 DDL 触发器来跟踪 DDL 活动,这对于create table
和drop table
操作非常有用,因为触发器获取已执行的 T-SQL,我可以愉快地将其存储在某个地方,稍后只需在其他服务器上执行它。
我遇到的问题是alter
操作:从管理工作室更改列名称时,生成的事件不包含有关列的任何信息!它只是说桌子被锁住了...更重要的是,如果一次更改了许多列(例如,列 foo => oof,以及列栏 => rab),则事件只会触发一次!
我可怜的人的解决方案是用一个表来存储将在更改操作之前和之后更改的表的结构。这样,我可以比较两种结构并找出哪些列发生了什么。
但在我这样做之前,我想知道是否可以使用我忽略的SQL Server中的其他功能来做到这一点,或者也许有更好的方法。你会怎么做?
有一个产品就是为了做到这一点(我写的)。
它监视包含 ddl 更改的脚本、编写者、编写时间以及它们对性能的影响,并使您能够轻松地将它们复制为一个部署脚本。对于您的要求,免费版本就足够了。
http://www.seracode.com/
SQL Server中没有关于您的需求的特殊功能。可以使用触发器,但它们需要大量 T-SQL 编码才能正常运行。快速解决方案将是一些第三方工具,但它们不是免费的。请查看有关第三方工具的答案 https://stackoverflow.com/a/18850705/2808398