Sql server 日志表架构更改
每当我进行模式更改时,是否有任何方法记录在Sql server 日志表架构更改,sql-server,sql-server-2008,sql-server-2005,triggers,Sql Server,Sql Server 2008,Sql Server 2005,Triggers,每当我进行模式更改时,是否有任何方法记录在表的模式中所做的更改 我在这里读了一篇关于的文章。但它并没有说明在表的架构中所做的具体更改。这将非常困难,因为在SSM中,表通常会在后台被删除和重建(取决于架构更改的复杂性&无论您是否启用了“防止保存需要重新创建表的更改”SSMS中的选项)-记录所有不同类型的更改将是一场噩梦。(删除约束,只需重新创建—批量重新插入、重命名等,而您可能要做的只是在联接表中重新排列列) 如果您对跟踪架构更改很认真,我强烈建议您编写架构脚本(使用MSMS中的“生成脚本”选项)
表的模式中所做的更改
我在这里读了一篇关于的文章。但它并没有说明在表的架构中所做的具体更改。这将非常困难,因为在SSM中,表通常会在后台被删除和重建(取决于架构更改的复杂性&无论您是否启用了“防止保存需要重新创建表的更改”SSMS中的选项)-记录所有不同类型的更改将是一场噩梦。(删除约束,只需重新创建—批量重新插入、重命名等,而您可能要做的只是在联接表中重新排列列)
如果您对跟踪架构更改很认真,我强烈建议您编写架构脚本(使用MSMS中的“生成脚本”选项),并将生成的文件检查到SVN/SourceSafe/TFS中,并使用这些系统可用的许多比较工具
或者,您可以使用第三方产品为您完成所有这些工作,例如Red Gates SQL源代码管理:
编辑:您可能会发现这很有用-它利用了ServiceBroker(SQL 2005+)和SSB队列:
使用以下格式的DDL触发器
CREATE TRIGGER tr_DDL_Database ON DATABASE
FOR DDL_SCHEMA_EVENTS
AS Begin
Insert Into LogTable (XmlColumn)
SELECT EVENTDATA()
End
对于这个问题,我可能会使用。虽然在我看来DDL触发器确实说明了对表所做的具体更改,但仅说明触发器定义:
Create Trigger tr_DDLNotikums
On DataBase
For **DDL_DATABASE_LEVEL_EVENTS**
这是一个部署问题,但显而易见的答案是DDL脚本的旧版本和新版本应该在源代码管理中,您可以轻松区分它们并查看有关更改的注释。如果这没有帮助,您需要澄清如何更改模式,即使用哪些工具?例如,无论何时在SSMS中,我都会更改表设计。在保存表设计时,应该调用触发器来记录所做的更改。关于事件通知的内容是什么?