2011-05-16 54 views
0

我使用VS2010数据库项目作为发布版本之间版本化数据库代码的一种方式。到目前为止,提供的解决方案似乎很好,但是有一个问题我想知道是否有其他人遇到过。VS2010数据库项目是否可以创建可重新运行的部署脚本?

从架构比较视图生成的升级脚本不可重新运行。作为一个标准,我通常会确保我的所有数据库发布脚本都是可重新运行的,以防在发布脚本部署到服务器时发生任何问题。

有谁知道是否有一种方法来配置VS2010创建可重新运行的升级脚本,即只有当sprocs存在时才会删除等。

+0

我还没有找到解决此问题的方法。我在VS产生它们之后手动编辑这些脚本。 – Matt 2011-06-07 14:34:16

回答

0

可能会从展鹏

+0

这不会产生可重新运行的脚本。它需要一个脚本并创建一个exe。但是,如果在事务中运行,脚本将在回退失败时回滚。 – 2011-05-17 01:52:57

0

退房Sql Packager一旦你这样做的模式比较和与您的数据库,你可以建立它让你的数据库文件.dbschema同步数据库项目模型。

然后,这可以与vsdbcmd一起使用来创建更改脚本,以升级早期版本的数据库以匹配.dbschema文件中定义的版本。这将为您提供可重新运行的升级脚本,如果失败,它会告诉您为什么失败,并且不会更改目标数据库。但是,只有从相同的数据库版本转到相同的数据库版本时才可重用。

我们转移到数据库项目(从redgate sql比较生成的脚本)的主要原因之一是摆脱这个问题。我们所有的升级脚本都是从特定版本到特定版本。数据库项目的主要优点之一是您不需要重新运行脚本。您有.dbschema文件,它定义了目标应该如何结束,并让VSDBCMD完成所有工作。我们甚至不倾向于生成脚本,我们使用VSDBCMD直接更新数据库。

如果你走这条路线http://blogs.msdn.com/b/bahill/archive/2009/02/21/deploying-your-database-project-without-vstsdb-installed.aspx有一个需要在开发环境外运行VSDBCMD所需的预先需求列表。

0

vsdbcmd的缺点是你必须跳过你的脑袋才能向表中添加不可空列。特别是如果你有很多数据。

0

在Visual Studio 2015(以及可能更早的版本)中,您可以将发布脚本设置为包含具有错误处理的单个事务。请看下图:

SSDT publishing with "Include Transactional Scripts"

包装纸正常的脚本可以在更大的交易,因为脚本介绍SQLCMD错误处理的前置/后置部署脚本是在Visual Studio中可用的外面的人不适合我项目:

:on error exit 

这将阻止你使用try渔获物有效地处理错误,并让你不必回滚事务手动

注:前/后部署脚本运行外部由“包含交易脚本”设置生成的交易,因此您将不得不自己管理这些交易

相关问题