在安装产品更新时如何更新SQL服务器数据库?是否有任何工具可以与Windows安装程序集成? 我的典型架构更改是:
答案 0 :(得分:4)
根据我的经验,当您的软件连接到数据库而不是在安装时,最好进行数据库架构更新。您想要做以下事情:
在运行的代码中,这一切都非常简单,但在安装程序中却不那么容易。
答案 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指令时,还要跟踪它们的“对应”,以便您可以随时(例如调试时间)将数据库结构降级到以前的版本。