C# 在实时环境中修补MS SQL Server数据库

C# 在实时环境中修补MS SQL Server数据库,c#,sql-server,database,patch,C#,Sql Server,Database,Patch,我有一个使用MS SQL Server存储数据的应用程序。我们将分几个步骤推出该应用程序,以便用户可以测试第一个基本功能,并随着时间的推移添加功能 这可能会导致数据库发生更改。在早期阶段,我们可以删除整个数据库,然后用脚本重新创建所有内容。但最终,用户希望保留他们的测试数据。例如,如果我向表中添加一个新列,我不想删除并重新创建整个表,从而丢失用户迄今为止在该过程中存储的所有数据 所以,我需要的是一个脚本,它将myDatabase v1.0更新为myDatabase v2.0。 我的问题是:创建这

我有一个使用MS SQL Server存储数据的应用程序。我们将分几个步骤推出该应用程序,以便用户可以测试第一个基本功能,并随着时间的推移添加功能

这可能会导致数据库发生更改。在早期阶段,我们可以删除整个数据库,然后用脚本重新创建所有内容。但最终,用户希望保留他们的测试数据。例如,如果我向表中添加一个新列,我不想删除并重新创建整个表,从而丢失用户迄今为止在该过程中存储的所有数据

所以,我需要的是一个脚本,它将myDatabase v1.0更新为myDatabase v2.0。

我的问题是:创建这样一个更新脚本的最佳方法是什么?我是否必须手动跟踪所有更改,然后自己组装更新脚本?或者是否有一个函数可以(半)自动地从旧数据库和新数据库创建更新脚本

最后,应用此修补程序的最佳方法是什么?我有一个ASP.NET Web API,所以我可以创建一个控制器API/updates/v1.0-to-v2.0 在服务器上应用脚本的代码是什么样子的

提前感谢,

Frank

我正在研究解决这个问题的方法,请访问dbpatcher.com,我创建的软件将有助于更轻松地迁移数据库更改。我正在整理网站,所以欢迎反馈。程序本身还不可用,因为我正试图找出发布的细节。

< P>如果这是一个持续的关注点(企业),你应该真正考虑不同的环境,比如测试、分级和生产。通过这种方式,您可以在一个原始的环境中测试部署和数据库脚本更改(看起来与生产环境一模一样)

考虑到这一点,要回答你的问题,真的没有一个好办法。我见过人们使用diff工具来检测模式之间的差异,它会创建脚本来同步两个模式,但这不是傻瓜式的

我发现编写更改脚本并将其与版本控制和安装过程(手动或自动)相结合是获得一致结果的唯一方法,即使这样有时也会失败

代码优先实体框架正试图解决这个问题,但它不是许多商店的选择

我很想看到一个好的工具来管理它,但是这里最大的问题是一组不同的框架和人为错误


就停机时间而言,实际上不存在web应用程序的就地升级。有一些方法可以将其降至最低,比如一次更新一组负载平衡的Web/App服务器,然后让用户无法使用新软件。如果您更改了表,那么您不锁定表并中断用户的可能性很低

谢谢您的回复

我有不同的环境,我关心的是如何更改数据库模式而不丢失生产环境中的数据(当然,如果可能的话)。停机并不是什么大问题。由于我还没有效率,我只是创建一个脚本来重新创建整个数据库,但是当用户存储了实时数据时,他可能会有点。。。心烦意乱


有一个很好的工具,似乎可以解决这个问题,但我还没有检查它

如果您使用的是VisualStudio数据库项目或SqlServerDataTools,那么这些差异/发布操作将变得更加容易。但是,根据更新或修补程序的性质,您可能需要一些停机时间。