无法将数据库模式复制到另一个SQL Server实例中。

问题描述 投票:0回答:1

我有一个大型数据库,必须在一个旧的SQL Server实例上重新创建。该数据库保持了与旧服务器相对应的兼容性级别设置。我知道,这并不能保证完全的向后兼容,但数据库模式最初是以旧服务器版本为中心创建和维护的。

下面是我尝试过的方法。

  • backup -> restore;当然不行,因为在较新的服务器版本上创建数据库备份时,是不能降级的(哦,微软,为什么Compat level也不生成兼容的备份?
  • DACPAC ->不知道什么原因,它失败了,声称缺少了一些依赖的对象(但它们在数据库中是存在的)。
  • 生成模式脚本--在较新的SQL Management Studio上(尝试过v17和v18),它失败了,原因是 Microsoft.SqlServer.Management.Smo.SmoException: Cyclic dependencies found.. 在旧的SQL Management Studio (2008)上,它不会失败,但会生成一个对象顺序错误的脚本,因此视图在视图中引用的表之前被创建,当然,执行这样的脚本会失败。
  • Visual Studio Schema比较工具--失败时发出无意义的警告,并使更新按钮失效。Cannot generate deployment plan due to an internal error: An error occurred during deployment plan generation. Deployment cannot continue.

有没有一个可行的(最好是--免费的)解决方案来解决这个问题?如何在另一台服务器的空数据库上复制数据库模式?

来源SQL服务器版本:2017

目标SQL服务器版本:2008 R2

数据库兼容性级别:2008(100)

sql-server compare database-schema migrate
1个回答
1
投票

利用 IF NOT EXISTS 构造和批次分离器(GO)允许您多次运行您的脚本。

在第一次尝试时,一些对象可能不会被创建,但这些错误不会妨碍脚本的其余部分的执行。

多次运行脚本,直到没有更多的错误返回,将创建所有对象。

声明:来自个人经验。

© www.soinside.com 2019 - 2024. All rights reserved.