2

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

4

2 回答 2

0

通常,您不会真的希望数据库项目创建 CDC 表,而是希望使用sys.sp_cdc_enable_table
创建它们 如果您允许数据​​库项目以正常方式创建表,那么 CDC 表最终会存在但他们的变更数据捕获实际上并没有启用。

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

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

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

我建议不要有太多依赖于 CDC 表存在的视图、函数或存储过程,但听起来可能为时已晚。
旁注:一般来说,您应该使用 cdc.fn_cdc_get_all_changes_cdc.fn_cdc_get_net_changes_函数,而不是直接引用 cdc 表,请参阅查询更改数据捕获数据
但是,这只是将问题转移到项目中不存在的那些函数.
不幸的是,似乎没有一个好方法可以让这些额外的视图在不编写脚本的同时编写对 sys.sp_cdc_enable_table 的调用的脚本

(老实说,我希望其他人能提出一个更好的答案来真正解决问题)

于 2015-05-07T00:50:08.527 回答
0

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

正如 Scott 正确所说,尝试在项目/解决方案中实现 cdc 模式或任何对象都不是一个好主意,这会产生你真的不想经历的不幸后果!

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

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

同样,当您考虑依赖视图时,该策略并不困难。像通常在项目中那样创建视图,但是作为占位符(例如,一个简单的 CREATE dbo.vMyView AS SELECT 1 FROM SomeTable)。在 PostDeployment 脚本中,添加另一个在创建 CDC 实例后执行的脚本,其中包含用于这些视图的 ALTER 语句(例如 ALTER VIEW dbo.vMyView SELECT Col1 FROM cdc.MyCDC_CT)请记住,视图一旦创建,即使基础表不存在,也可以存在。

于 2016-09-21T17:12:40.073 回答