6

安装产品更新时如何更新 SQL 服务器数据库?是否有任何工具可以与 Windows 安装程序集成?我的典型架构更改是:

  • 添加/删除列
  • 添加/删除表。
  • 添加视图。
  • 添加/更改索引。
4

6 回答 6

4

根据我的经验,最好在您的软件连接到数据库时进行数据库架构更新,而不是在安装时进行。您想要执行以下操作:

  • 使用唯一标识符(例如 guid)标识每个架构更改
  • 包括您可以对产品应用的所有更改的列表,例如在构建期间编译到资源中
  • 在数据库中有一个表来保存已应用的架构更改列表
  • 当您连接到数据库时,扫描该表以查看是否需要任何更改

这一切都非常简单,可以在您的运行代码中完成,但在您的安装程序中却不那么容易。

于 2008-09-22T15:49:23.220 回答
2

Adam Cogan 建议创建一个补丁表,用于记录初始版本之后的每个更新。不要通过 SSMS 或企业管理器更改架构,请确保您编写每个更改的脚本……这两个应用程序都允许您编写更改脚本,然后不应用它们。将脚本保存到文件(可能将它们作为资源添加),然后在每次应用程序运行时检查补丁表。

亚当在这里有一些更好的 SQL 数据库的规则

http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx

于 2008-09-23T10:06:29.917 回答
1

不确定与 Windows 安装程序的集成,但您可能会查看 Red Gate 的SQL Packager

于 2008-09-22T15:15:06.347 回答
0

InstallShield允许您在安装过程中执行 SQL 脚本。不过没试过,只记得上次我看它是在 GUI 上!

于 2008-09-22T15:18:32.640 回答
0

您可能想查看 SubSonic 的迁移。首先,这是对数据库进行版本控制的好方法。其次,弄清楚如何从安装程序运行完全相同的脚本应该不难。

于 2008-09-22T15:30:42.937 回答
0

我认为您的软件的每个版本都有一堆数据库更新。为什么不将这些更新编写为 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 指令时,还要跟踪它们的“对应物”,以便您可以随时(例如调试时)将数据库结构降级到以前的版本。

于 2008-09-22T17:28:56.790 回答