Sql server 如何更新/分发SQ Server DB项目?

Sql server 如何更新/分发SQ Server DB项目?,sql-server,database,visual-studio,projects,Sql Server,Database,Visual Studio,Projects,我的公司正在让我考虑改变目前管理软件使用的数据库的方法。我们不仅需要管理办公室内的数据库,还需要管理全国各地的客户数据库。目前,我们有一个程序,它运行各种sql脚本来添加、删除和更新数据库中的字段和表,但是这个程序开始变得庞大和繁琐 我的任务是研究SQL Server数据库项目,至于创建一个新的数据库,它看起来很棒。但是,我找不到太多关于我们如何能够使用此向客户分发更新的信息(他们在站点上运行自己的SQL Server),以便他们拥有最新的表和模式信息,以便与我们程序中的更改和添加的功能相对应。

我的公司正在让我考虑改变目前管理软件使用的数据库的方法。我们不仅需要管理办公室内的数据库,还需要管理全国各地的客户数据库。目前,我们有一个程序,它运行各种sql脚本来添加、删除和更新数据库中的字段和表,但是这个程序开始变得庞大和繁琐

我的任务是研究SQL Server数据库项目,至于创建一个新的数据库,它看起来很棒。但是,我找不到太多关于我们如何能够使用此向客户分发更新的信息(他们在站点上运行自己的SQL Server),以便他们拥有最新的表和模式信息,以便与我们程序中的更改和添加的功能相对应。有什么内置的方法可以做到这一点吗

每次我用DB项目更新现有数据库时,它都会说使用模式比较。出于各种原因,在个人测试数据库之外,这绝对不是一个选项

试试SQL server数据工具(SSDT)+TFS+模式比较。它会自动创建模式更新脚本。 它在链接服务器和跨数据库方面存在一些问题,但到目前为止,我尝试了通过某种方式解决所有问题。
另一件事是红门源代码控制。非常简单和直观。但是它需要额外的钱。

通常,您会保留以前版本数据库的一个版本,并与该版本进行模式比较,然后将其保存为.SQL文件。然后,客户端可以运行多个.sql文件的组合,以将它们升级到最新版本(但它们不能以这种方式降级)


作为替代方案,请查看实体框架迁移,它们使您可以控制更新架构和插入记录,但也允许您在需要时回滚/降级。

我建议您在客户端计算机上使用SqlPackage.exe进行部署。一般过程是:将现有数据库导入SQL项目。获取包含所有模式更改的.dacpac,并根据需要编写操作数据所需的部署前/部署后脚本。然后,不要使用模式比较,而是使用发布进行数据库更新-在VS中,项目上有一个“发布”选项,而SqlPackage.exe是具有匹配功能的命令行工具

这种方法有两个好处:

  • 完全发布可确保目标数据库实际更新以匹配项目架构。如果您针对一个数据库生成脚本(使用模式比较/发布),然后尝试应用到另一个数据库,那么您必须希望它们事先具有完全相同的模式。如果您实际针对真正的目标服务器运行发布/生成脚本,那么您将保证所应用的是您所期望的
  • 在无法在客户端计算机上安装任何东西的情况下,SqlPackage非常有用。这是因为您可以将所有必需的dll复制到一个文件夹中(从C:\Program files(x86)\Microsoft SQL Server\120\SDK\Assembly获取SqlPackage.exe和同一文件夹中的其他文件,以及Microsoft.SqlServer.Transact-SQL.ScriptDom.dll和Microsoft.SqlServer.Types.dll),并从任何位置使用该文件。您可以将其放在thumb驱动器上,也可以将其复制为.zip文件

  • 如果您选择使用Redgate工具,这里有一个方法

  • 在您的客户数据库上运行。这是一个免费的工具,可以获取客户数据库的模式快照。这将创建一个仅包含架构信息的二进制文件

  • 将此架构文件复制到本地环境。使用SQL Compare将开发数据库(假设这是升级的源)与架构快照(目标)进行比较。这将生成一个为客户定制的SQL部署文件

  • 将SQL部署文件复制到您的客户环境并执行它


  • 如果您需要任何进一步的帮助,请对此答案发表评论或在上发表问题。我们很乐意提供帮助。

    与我们最多只能访问RDP的数据库相比,我们如何使用类似于模式的东西?目前,我提到的应用程序由客户通过我们的网站或FTP下载,然后他们运行它,在那里它将运行各种SQL脚本。所有客户可能都没有运行以前的更新,因此很遗憾,我们不能仅基于当前的office数据库。请使用版本控制TFS、Git、CVS和SVN。任何人。然后通过RDP把它拿到他们的服务器上进行比较。我想确保我能理解。我有一个包含所有静态数据的基本sql数据库,它的模式与sql项目相同。我有一个客户的服务器上有一个数据库,需要更新的模式和静态数据。我使用SQLPackage的过程是什么?我构建了我的SQL项目,并得到了一个dacpac文件。然后,在客户机上,我将使用我假设的一些参数运行SqlPackage,一些参数指向dacpac,另一些参数指向数据库/服务器?如果你能澄清/纠正整个过程,你将比你已经纠正的更能拯救生命。下面是一个解释使用SqlPackage.exe部署的博客:。对于静态数据,建议编写一个部署后脚本,将该数据合并到表中(例如,使其幂等,以便多次部署不会弄乱数据)。Jamie Thomson在这篇博文中有这样的例子:。这里还有SqlPackage.exe doc页面-很有帮助,因为它解释了发布/脚本所需的各种参数。实际上,这可能是在项目中包含数据的最佳参考,清楚地展示了如何编写合并。希望这对你有帮助,非常感谢!这一切看起来都很棒,我希望能很快测试出来!