将 db 从 azure bacpac 文件导入到本地 sql server 2016 时,出现以下错误。
Error SQL72014: .Net SqlClient Data Provider: Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'EXTERNAL'.
Error SQL72045: Script execution error. The executed script: CREATE EXTERNAL DATA SOURCE [BoxDataSrc]
WITH (
TYPE = RDBMS,
LOCATION = N'MYAZUREServer.database.windows.net',
DATABASE_NAME = N'MyAzureDb',
CREDENTIAL = [SQL_Credential]
);
(Microsoft.SqlServer.Dac)
最佳答案
我今天也遇到了同样的问题。由于“WITH(TYPE = RDBMS)”仅适用于 Azure SQL DB,因此我们在尝试将 bacpac 导入本地 SQL Server 2017 时收到错误。感谢这篇文章,我确实找到了解决方案:
https://blogs.msdn.microsoft.com/azuresqldbsupport/2017/08/16/editing-a-bacpac-file/
相关步骤重写如下:
制作 bacpac 文件的副本(为了安全起见,以防出现错误)。
将文件扩展名更改为 zip,然后将其解压到文件夹中。令人惊讶的是,bacpac 实际上只是一个 zip 文件,而不是专有的且难以进入的文件。
找到 model.xml 文件并对其进行编辑以删除如下所示的部分:
<Element Type="SqlExternalDataSource" Name="[BoxDataSrc]"> <Property Name="DataSourceType" Value="1" /> <Property Name="Location" Value="MYAZUREServer.database.windows.net" /> <Property Name="DatabaseName" Value="MyAzureDb" /> <Relationship Name="Credential"> <Entry> <References Name="[SQL_Credential]" /> </Entry> </Relationship> </Element>
如果您有多个此类外部数据源,您可能需要为每个数据源重复步骤 3。我只有一个。
保存并关闭 model.xml。
现在您需要重新生成 model.xml 的校验和,以便 bacpac 不会认为它被篡改(因为您刚刚篡改了它)。创建一个名为computeHash.ps1 的PowerShell 文件并将此代码放入其中。
$modelXmlPath = Read-Host "model.xml file path" Get-FileHash -Path $modelXmlPath -Algorithm 'SHA256' | Select-Object -ExpandProperty Hash
运行 PowerShell 脚本并为其提供解压并编辑的 model.xml 文件的文件路径。它将返回一个校验和值。
复制校验和值,然后打开 Origin.xml 并替换现有的校验和,如下所示:
<Checksum Uri="/model.xml">9EA0F06B282D4F42955C78A98822A31AA0ED0225CB131B8759379055A482D01F</Checksum>
保存并关闭 Origin.xml,然后选择所有文件并将它们放入新的 zip 文件中,并将扩展名重命名为 bacpac。
现在您可以使用这个新的 bacpac 导入数据库而不会出现错误。它对我有用,也对你有用。
关于sql - 将 Azure bacpac 文件导入本地数据库时出错 EXTERNAL 附近的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42028861/