导出Azure SQL数据库时出错SQL71501

时间:2016-10-18 13:20:57

标签: sql azure azure-sql-database

导出Azure SQL数据库时出现奇怪错误。在最近的架构发生变化之前,导出工作正常,但它现在给了我错误SQL71501。

数据库是V12,兼容级别130(尽管master数据库仍然是兼容级别120)。

问题似乎是由一个新的表值函数引起的,该函数使用内置的STRING_SPLIT函数。已经有使用STRING_SPLIT的存储过程,它们似乎不会影响导出,但功能(编译好,工作正常)似乎导致导出问题。

以下功能是真实版本的简化版本,但会导致同样的问题。

CREATE FUNCTION [dbo].[TestFunction](
    @CommaSeparatedValues VARCHAR(MAX)
)
RETURNS TABLE
AS
    RETURN

    SELECT      c.ClientId,
                c.FullName

    FROM        dbo.Client c

    INNER JOIN  STRING_SPLIT(@CommaSeparatedValues, ',') csv
    ON          c.ClientId = csv.value

导入/导出历史记录刀片中给出的完整错误消息如下:

  

服务操作期间遇到错误。

     

在用作数据包一部分的架构中找到了一个或多个不受支持的元素。

     

错误SQL71501:验证元素[dbo]时出错。[TestFunction]:函数:[dbo]。[TestFunction]有一个未解析的对象[dbo]的引用。[STRING_SPLIT]。

     

错误SQL71501:验证元素[dbo]时出错。[TestFunction]:函数:[dbo]。[TestFunction]包含对象的未解析引用。对象不存在或引用不明确,因为它可以引用以下任何对象:[dbo]。[Client]。[csv],[dbo]。[STRING_SPLIT]。[csv]或[dbo]。 [STRING_SPLIT] [值]。

3 个答案:

答案 0 :(得分:4)

这是来自Microsoft SQL团队的Xiaochen。我们已经在努力解决这个问题。该修补程序将在未来几周内部署到导出服务。同时,该修复程序已在最新的DacFX 16.4(https://blogs.msdn.microsoft.com/ssdt/2016/09/20/sql-server-data-tools-16-4-release/)中提供。在我们在服务中修复此问题之前,您可以下载DacFX 16.4并使用sqlpackage来解决。

答案 1 :(得分:1)

SQLAzure验证Schema,导出数据库时对象的引用,如果任何引用失败,如下例所示

  

错误SQL71501:验证元素[dbo]时出错。[TestFunction]:函数:[dbo]。[TestFunction]有一个未解析的对象[dbo]的引用。[STRING_SPLIT]。

导出不会成功。因此,您需要在导出之前解决这些错误。

docs,您需要将兼容级别设置为130

  

STRING_SPLIT函数仅在兼容级别130下可用。如果您的数据库兼容级别低于130,则SQL Server将无法找到并执行STRING_SPLIT函数

更新:

我能够重现相同的问题,只有当前的解决方法是删除表值函数,即引用系统函数并导出DACPAC,一旦导出完成,重新创建表值函数:(

我在这里提出了这个问题:请upvote ..

https://feedback.azure.com/forums/217321-sql-database/suggestions/16722646-azure-database-export-fails-when-split-string-is-i

答案 2 :(得分:0)

数据迁移助手为我做到了。首先对架构进行评估,成功后,运行迁移https://www.microsoft.com/en-us/download/details.aspx?id=53595/