SQL Server数据库:将90个数据库更新脚本合并为一个脚本

时间:2017-09-24 11:13:37

标签: sql sql-server

我有一个已经发布多年的应用程序。我已经更新了SQL Server数据库大约90次,每次我创建了一个更新SQL脚本,所以当用户运行新的软件版本时,数据库会更新。

我想将所有更新合并到一个SQL脚本中,以使部署更快更简单,是否有一种简单的方法可以做到这一点?我认为在通过SQL Server Management Studio运行所有90个更新后,我可以简单地获取最新的数据库?

修改

澄清;我写的软件会在用户下载最新版本时自动应用新的数据库更新。这是通过C#/ .Net完成的,并在启动时以 XX_update.sql 格式查找嵌入式sql脚本,逐个调用每个脚本,即

1_update.sql - 这会创建表格和初始数据等。这是我的初始发布数据库。

2_update.sql - 对初始数据库的更新,例如添加新SP或更改列数据类型等

3_update.sql

4_update.sql

...

90_update.sql (4年后会有很多程序更新!)。

理想情况下,我会安装我的软件并创建一个运行所有90个更新脚本的全新数据库。然后拿这个数据库并将其转换成一个脚本,我可以替换上面的所有90个脚本。

4 个答案:

答案 0 :(得分:1)

评论太长了。

没有“简单”的方法可以做到这一点。这取决于各个更新的作用。

但是,将来您可以遵循一个流程。每当发生更新时,您都应该维护脚本以进行增量更新和完整更新。您可能还希望定期引入主要版本,并能够升级到这些版本。

与此同时,您需要通过遍历各个更新来构建完整的更新。

答案 1 :(得分:1)

我在工作中使用类似的系统,虽然我更喜欢单独运行脚本,但有时当他们必须由其他人部署而没有问题时,我合并了几个脚本。

在SQL Server中,规则是只要您通过go分隔脚本并使用SQL Server Management Studio或其他正确处理批处理分隔符的工具就可以合并它,因为它看起来很合适像SQL Server的单独脚本(而不是作为一个大脚本发送到SQL Server,工具使用go as the batch separator批量发送)。

唯一的问题是,如果脚本中间有错误,该工具会继续将其余批次发送到服务器(至少默认情况下,可能有更改此选项的选项)。这就是为什么我喜欢在可能的情况下使用工具然后单独运行,只是为了在更安全的一面犯错并在遇到问题时停止并轻松找到有问题的命令。

此外,对于新部署,您最好的选择是使用已更新的数据库而不是使用原始数据库并应用所有更新。为了防止再次出现这种情况,您可以保留一个未用于任何测试的空模板数据库,并在更新其余数据库时更新它。

答案 2 :(得分:0)

您是否在服务器上以manaually方式运行更新。相反,您可以创建.bat文件,powershell脚本或exe。可以对文件夹中的更新脚本进行编号。该脚本可以逐个获取更新并通过数据库连接执行它而不是您执行此操作。

如果您有多个脚本文件,并且希望它们合并为一个, 将这些重命名为txt,combine,将生成的文件重命名为sql。 https://www.online-tech-tips.com/free-software-downloads/combine-text-files/

答案 3 :(得分:0)

这很容易。下载SQL Server Data Tools并使用它来创建部署脚本。如果没有现有数据库,它将创建所有对象,如果以旧版本为目标,它将对目标数据库执行差异并创建创建缺失对象的脚本,并更改​​现有对象。

您还可以使用SSMS为当前版本生成脚本,或使用SSMS进行备份,并在安装中使用还原。