Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用软件更新更新SQL Server数据库架构_.net_Sql Server_Windows Installer - Fatal编程技术网

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

.net 使用软件更新更新SQL Server数据库架构,.net,sql-server,windows-installer,.net,Sql Server,Windows Installer,在安装产品更新时,如何更新SQL Server数据库?是否有任何工具可以与windows installer集成? 我的典型架构更改是: 添加/删除列 添加/删除表 添加视图 添加/更改索引 不确定是否与windows安装程序集成,但您可以研究Red Gate的允许您在安装过程中执行SQL脚本。虽然没有尝试过,但请记住上次我查看时它在GUI上 你可能想看看亚音速的。首先,这是一种对数据库进行版本设置的好方法。其次,找出如何从安装程序运行完全相同的脚本应该不会太难。根据我的经验,最好在软件连接到

在安装产品更新时,如何更新SQL Server数据库?是否有任何工具可以与windows installer集成? 我的典型架构更改是:

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

不确定是否与windows安装程序集成,但您可以研究Red Gate的

允许您在安装过程中执行SQL脚本。虽然没有尝试过,但请记住上次我查看时它在GUI上

你可能想看看亚音速的。首先,这是一种对数据库进行版本设置的好方法。其次,找出如何从安装程序运行完全相同的脚本应该不会太难。

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

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

这在您运行的代码中非常简单,但在安装程序中却不容易做到。

我认为您的软件的每个版本都有一系列数据库更新。为什么不将这些更新编写为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帮助。请在删除某个字段之前(例如)小心删除链接到该字段的索引和约束

当然,您可以添加一些额外的更新说明来计算添加列的值,等等

您甚至可以考虑更复杂的事情,检查以前的升级步骤(导致数据库版本为#2.161)是否正确执行


我的建议是:在编写这些T-SQL指令时,还要跟踪它们的“对应项”,以便您可以随时(例如调试时)将您的数据库结构降级到以前的版本。

Adam Cogan建议创建一个修补程序表,用于记录初始版本之后的每个更新。不要通过SSMS或Enterprise Manager更改模式,而是确保为每个更改编写脚本…这两个应用程序都允许您编写更改脚本,而不是ap将脚本保存到文件中(可能会将其添加为资源),然后每次运行应用程序时只需检查补丁表

Adam在这里有一些改进SQL数据库的规则


Red Gate有一些很好的SQL Server工具…我建议您检查一下。如果两个用户同时运行应用程序,并且他们都尝试应用更新…?有几种方法可以处理这个问题。我通过将每个db更改都写为完全幂等的方式来管理它--有很多类似这样的代码“如果column_exists=0,则添加column”。您也可以在某个位置有一个公共的“正在升级”位。某些数据库引擎(如SQL Server)允许将更新作为事务的一部分运行,这将确保多个用户并行运行更新时的数据一致性(第二个用户应该会出现一些错误,从而导致回滚)。