我正在使用VS2010数据库项目作为在发布版本之间版本化数据库代码的方法。到目前为止,提供的解决方案似乎很好;但是有一个问题,我想知道是否有其他人遇到过。
从架构比较视图生成的升级脚本不可重新运行。作为标准,我通常会确保所有数据库发布脚本都可以重新运行,以防万一将发布脚本部署到服务器时出现任何问题。
有没有人知道是否有办法配置VS2010来创建可重新运行的升级脚本,即只有在存在等情况下才丢弃sprocs?
答案 0 :(得分:0)
可以从RedGate
查看Sql Packager答案 1 :(得分:0)
完成模式比较并将数据库项目模型与数据库同步后,您可以构建它以获取数据库的.dbschema文件。
然后,可以将其与vsdbcmd一起使用以创建更改脚本,以升级早期版本的DB以匹配.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所需的预先要求列表。
答案 2 :(得分:0)
vsdbcmd的缺点是你必须跳过头来向表中添加非NULLable列。特别是如果你有很多数据。
答案 3 :(得分:0)
在Visual Studio 2015(可能还有早期版本)中,您可以将发布脚本设置为包含具有错误处理功能的单个事务。见下文:
SSDT publishing with "Include Transactional Scripts"
在更大的事务中包装普通脚本对我来说不起作用,因为脚本在Visual Studio项目中可用的部署前/部署脚本之外引入了sqlcmd错误处理:
:on error exit
这会阻止您使用try-catches来有效地处理错误并让您不得不手动回滚事务
注意:部署前/后脚本在外部运行由"包含事务脚本"生成的事务。设置,所以你必须自己管理