导出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] [值]。
答案 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 ..
答案 2 :(得分:0)
数据迁移助手为我做到了。首先对架构进行评估,成功后,运行迁移https://www.microsoft.com/en-us/download/details.aspx?id=53595/