Visual Studio 2010:有没有办法部署在正常构建中保留对象的单个数据库对象?

时间:2010-08-11 13:48:56

标签: database visual-studio deployment object

开发人员表示希望从Sql Server 2008项目(例如存储过程)部署单个数据库对象,而无需使用构建/部署或架构比较功能。

为了实现这一点,开发人员已经创建了他们的数据库对象脚本,包括脚本顶部的“if exists .. drop”检查,并在脚本中包含了对象的grant语句。

这会导致构建错误,从而阻止构建/部署或架构比较功能运行。那么,开发人员将对象标记为“不在构建中”,但是根本无法使用构建/部署或模式比较来部署对象。

有没有人找到一种从visual studio快速部署单个数据库对象的方法,该方法不涉及架构比较或构建/部署,而不会从正常构建过程中删除对象?手动复制/粘贴不是一种选择,但有效地执行相同操作的脚本/宏将是可行的。

2 个答案:

答案 0 :(得分:1)

SQL Server数据工具(SSDT)现在通过比较提供此功能。可以部署比较中识别的个体差异。我们发现在开发期间,发布往往会导致其他开发人员在共享开发数据库服务器上进行的同步更改重叠。比较工具一直运行得很好,除了比较窗口关闭时发生的非常烦人的崩溃问题。我们使用32位Vista,3GB内存和VS 2010.其他配置可能不会出现此问题。

答案 1 :(得分:0)

首先,我想评论一下,您似乎正在与数据库项目的目标范式作斗争。

  • 如果您的项目部署在[1],
  • 然后成为源存储库中的相应分支/标签[2]。
  • 如果您从上面的基线[2]更改单个对象[6],并构建新版本[3],
  • 然后当您将[3]部署到[1]时,部署脚本应该只找到一个差异,并且更改的净效果将是所有将应用的。

因此,从理论上讲,没有理由不仅仅是简单地构建和部署 提示:在采用新模式时,完全接受它是值得的;部分采用往往会导致一系列问题。

然而,那说,我也许可以提供帮助。

我们有类似的需求,因为实际的部署是我们无法控制的。我们只控制部分数据库,并且必须将我们的更改提供给另一个团队进行审核 我们必须为每个对象提供单独的“自包含”脚本,其中如果存在..drop ,则底部为 grant permission
但是,我们希望使用数据库项目的其他好处,然后在我们“部署”时简单地复制出各个脚本文件。

我们提出的解决方案是将额外的“位”放在注释块中,如下所示:

/*SINGLE_OBJECT_DEPLOYMENT
if exists (...)
  DROP ...
--*/

--/*SINGLE_OBJECT_DEPLOYMENT
if exists (...)
  DROP ...
--*/

请注意,使用/*SINGLE_OBJECT_DEPLOYMENT进行简单搜索和替换--/*SINGLE_OBJECT_DEPLOYMENT可启用已注释的代码,因此可以轻松将其放入宏或其他半自动过程中。