在 Visual Studio 2012/2010 数据库项目中获取 cdc 表

Posted

技术标签:

【中文标题】在 Visual Studio 2012/2010 数据库项目中获取 cdc 表【英文标题】:Get cdc tables in visual studio 2012/2010 database project 【发布时间】:2013-05-09 16:46:17 【问题描述】:

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

【问题讨论】:

想到的解决方法是在部署后脚本中删除/重新创建并在那里应用权限。当视图依赖于不存在或尚未存在的对象时,我必须这样做。它们仍会进行版本控制,但不会作为项目的一部分。 【参考方案1】:

一般来说,您并不希望数据库项目创建 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 的调用的脚本

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

【讨论】:

【参考方案2】:

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

正如 Scott 正确所说,尝试在项目/解决方案中实现 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)。请记住,视图一旦创建,即使基础表不存在,也可以存在。

【讨论】:

以上是关于在 Visual Studio 2012/2010 数据库项目中获取 cdc 表的主要内容,如果未能解决你的问题,请参考以下文章

我的visual studio快过期了!怎么办?

visual studio 如何生成动态库

visual studio怎么替代IAR

如何在visual studio开发android程序

无法找到visual studio 2017生成工具

Visual studio 编辑标记