在visual studio 2012/2010数据库项目中获取cdc表

时间:2013-05-09 16:46:17

标签: visual-studio-2010 visual-studio-2012 database-project cdc change-data-capture

我正在尝试在Visual Studio 2012/2010中创建一个数据库项目,我需要CDC(Change Data Capture)表,因为我的很多视图都依赖于CDC表。我找不到任何方法来导入cdc架构/表:(。在许多博客中读到不支持导入cdc。是否有任何解决方法。请建议

2 个答案:

答案 0 :(得分:0)

通常,您不希望数据库项目创建CDC表,您希望使用sys.sp_cdc_enable_table创建它们。 如果允许数据库项目以正常方式创建表,则CDC表最终会存在,但实际上不会启用其更改数据捕获。

显然,您可以在Pre或Post脚本中编写对sys.sp_cdc_enable_table的调用脚本,但据我所知,这两个地方都不理想。

如果将sys.sp_cdc_enable_table调用放在Pre脚本中,则更改不是所有原始表都存在(在新部署中不存在任何原始表),或者这些原始表将在主要部署中更改形状在Pre运行之后发生。

如果将sys.sp_cdc_enable_table调用放在Post脚本中,则您不能拥有依赖于作为主数据库项目部署的一部分部署的CDC表的视图(并非数据库项目中没有错误或警告) )。

我建议没有太多的视图,功能或存储过程依赖于CDC表的存在,但听起来可能为时已晚。
附注:一般来说,您应该使用cdc.fn_cdc_get_all_changes_cdc.fn_cdc_get_net_changes_函数,而不是直接引用cdc表,请参阅Querying Change Data Capture data
但是,这只是将问题沿着一个级别移动到项目中不存在的功能 不幸的是,似乎没有一个很好的方法来获得这些额外的视图,而无需在脚本调用sys.sp_cdc_enable_table的同一点编写脚本。

(老实说,我希望其他人会有更好的答案来解决这个问题)

答案 1 :(得分:0)

我们最近在实施阶段使用TFS / VS进行构建的数据库项目中遇到了同样的问题。

正如斯科特正确地说的那样,尝试在项目/解决方案中实现cdc架构或任何对象并不是一个好主意,这会产生你真正不想体验的不幸后果!

对于TFS / VS项目,您应该实施Pre-PostDeployment脚本策略,从而可以在PreDeploy过程中禁用CDC,然后在PostDepolyment过程中重新创建实例。

通过这种方式,您可以确保统一创建正确的CDC实例。

再次考虑依赖观点时,策略并不困难。 像往常一样在项目中创建视图,但作为占位符(例如,简单的CREATE dbo.vMyView AS SELECT 1 FROM SomeTable)。在PostDeployment脚本中,添加另一个脚本,该脚本执行 AFTER 已创建CDC实例,并使用这些视图的ALTER语句(例如ALTER VIEW dbo.vMyView SELECT Col1 FROM cdc.MyCDC_CT)。请记住,一旦创建了一个视图,即使基础表没有,它也可以存在。