使用软件更新更新SQL Server数据库架构

时间:2008-09-22 15:10:45

标签: .net sql-server windows-installer

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

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

6 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

InstallShield允许您在安装过程中执行SQL脚本。虽然没试过,但是记得上次看的时候它就在GUI上了!

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我认为您的每个版本的软件都有一堆数据库更新。为什么不将这些更新作为T-SQL指令编写,以便在首次启动新版软件时进行测试执行?只需打开软件与数据库的连接,然后发送DDL指令,就像发送任何SELECT或UPDATE指令一样。我也会做类似于Jack Paulsen的建议:用双识别系统维护这些T-SQL指令的列表:一个链接到它应用的数据库/软件版本(可以是uniqueIdentifier),另一个(数字)到按顺序保存指令(参见我的示例:指令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指令时,还要跟踪它们的“对应”,以便您可以随时(例如调试时间)将数据库结构降级到以前的版本。