Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 日志表架构更改_Sql Server_Sql Server 2008_Sql Server 2005_Triggers - Fatal编程技术网

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中,我都会更改表设计。在保存表设计时,应该调用触发器来记录所做的更改。关于事件通知的内容是什么?