安装产品更新时如何更新 SQL 服务器数据库?是否有任何工具可以与 Windows 安装程序集成?我的典型架构更改是:
- 添加/删除列
- 添加/删除表。
- 添加视图。
- 添加/更改索引。
安装产品更新时如何更新 SQL 服务器数据库?是否有任何工具可以与 Windows 安装程序集成?我的典型架构更改是:
根据我的经验,最好在您的软件连接到数据库时进行数据库架构更新,而不是在安装时进行。您想要执行以下操作:
这一切都非常简单,可以在您的运行代码中完成,但在您的安装程序中却不那么容易。
Adam Cogan 建议创建一个补丁表,用于记录初始版本之后的每个更新。不要通过 SSMS 或企业管理器更改架构,请确保您编写每个更改的脚本……这两个应用程序都允许您编写更改脚本,然后不应用它们。将脚本保存到文件(可能将它们作为资源添加),然后在每次应用程序运行时检查补丁表。
亚当在这里有一些更好的 SQL 数据库的规则
http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx
不确定与 Windows 安装程序的集成,但您可能会查看 Red Gate 的SQL Packager
InstallShield允许您在安装过程中执行 SQL 脚本。不过没试过,只记得上次我看它是在 GUI 上!
您可能想查看 SubSonic 的迁移。首先,这是对数据库进行版本控制的好方法。其次,弄清楚如何从安装程序运行完全相同的脚本应该不难。
我认为您的软件的每个版本都有一堆数据库更新。为什么不将这些更新编写为 T-SQL 指令,以便在新版本软件首次启动时进行测试执行?只需从您的软件打开与数据库的连接并发送 DDL 指令,就像发送任何 SELECT 或 UPDATE 指令一样。我也会做一些类似于 Jack Paulsen 提议的事情:使用双重标识系统维护这些 T-SQL 指令的列表:一个链接到它适用的数据库/软件版本(可以是唯一标识符),另一个(数字)链接到保持指令按顺序排列(参见我的示例:指令 2 不能在指令 1 之前执行)
例子:
//instruction 1, batch instructions for version#2.162
USE myDatabase
GO
ALTER TABLE myTable
ADD myColumn uniqueIdentifier Null
GO
//instruction 2, batch instructions for version#2.162
USE myDatabase
ALTER TABLE myTable
ADD CONSTRAINT myTable_myColumn FOREIGN KEY (myColumn) ...
GO
有关 ALTER、DROP 和 CREATE 指令的完整描述,请参阅 T-SQL 帮助。请注意(例如)在删除该字段之前删除链接到该字段的索引和约束。
您当然可以添加一些额外的 UPDATE 指令来计算添加列的值等。
您甚至可以考虑更复杂的事情,检查之前的升级步骤(导致数据库版本 #2.161)是否正确执行。
我的建议:在编写这些 T-SQL 指令时,还要跟踪它们的“对应物”,以便您可以随时(例如调试时)将数据库结构降级到以前的版本。