30

我想使用 Server Management Studio 提取 MSSQLServer 数据库的数据库模式。我使用提取命令“提取数据层应用程序..”

在数据库中有几个对另一个数据库的引用。因此,我收到以下错误。

提取数据库时出错:验证数据包的模式模型失败。错误 SQL71562:验证元素 [dbo].[x] 时出错,对对象 [dbo].[y] 的引用未解析。从该平台创建包时不支持外部引用。

问题是,SSMS 使用带有参数/p:VerifyExtraction=True的 SQLPackage.exe 。当我使用控制台并在没有此参数的情况下调用 SQLPackage.exe 时,它​​默认使用/p:VerifyExtraction=False并且我可以创建 .dacpac 文件。

有没有办法配置 SSMS 以禁用验证?

4

2 回答 2

54

我也找不到适用于 SSMS(2008 R2 或 2012)的方法,但带有 SSDT 的 Visual Studio(2013)似乎可以工作:在 VS 中,转到 SQL Server 对象资源管理器,连接到有问题的服务器,右键单击有问题的数据库,提取数据层应用程序,然后调整提取设置,其中之一是“验证提取”。我不知道为什么 MS 不只是将其构建到 SSMS 中。

不过,我注意到的一件有点奇怪的事情是,VS 只会通过这种方法提取 .DacPac。即使您选择将数据添加到数据提取,扩展名仍然是 .DacPac。我的印象是 .DacPac 仅用于 Schema Only,而 .BacPac 用于 Schema + Data。无论如何,在 VS 创建 .DacPac(架构 + 数据)文件后,SSMS 能够使用“部署数据层应用程序...”向导将其正常导入。

于 2015-01-15T19:31:24.490 回答
31

如果您不能使用 Visual Studio,您可以使用命令行SqlPackage应用程序从数据库中提取架构。默认情况下,这不会验证架构(不,我不知道为什么 SSMS 和命令行产品具有不同的默认值!)。SqlPackage.exe可以在C:\Program Files (x86)\Microsoft SQL Server\<SQL_VERSION>\DAC\bin.

例如,以下MyDatabase从本地 SQL Server 实例中提取架构并将其输出到.dacpac本地文件系统上的文件:

sqlpackage /Action:Extract /SourceDatabaseName:"MyDatabase" /SourceServerName:localhost /TargetFile:"C:\SomeDirectory\MyDatabase.dacpac"

如果您想在稍后阶段包含模式验证,您可以通过添加/p:VerifyExtraction=True到命令行来显式设置标志。

完整的信息SqlPackage.exe可以在这里找到:

https://msdn.microsoft.com/library/hh550080.aspx

于 2015-06-08T14:21:40.650 回答