我正在使用MS数据迁移助手工具将SQL Server 2016数据库移动到Azure。我在80多个存储过程中收到以下错误:
Azure SQL数据库中不支持使用三部分或四部分名称的查询或引用。仅当database_name是当前数据库或database_name是tempdb且object_name以#开头时,才支持三部分名称格式[database_name]。[schema_name]。[object_name]。
所有这些存储过程都使用当前数据库并引用当前数据库名称。例如,该指令导致错误:
DELETE FROM [STDR].[dbo].[report] WHERE [report_id] = @xid
当我运行命令时:
SELECT DB_NAME();
我明白了:
STDR
这可能是DMA工具中的错误吗?它阻止我执行迁移。我宁愿不必修改所有这些程序。谢谢。
1.使用Azure SQL数据库中不支持的三部分或四部分名称的查询或引用。
这不是DMA工具中的错误。 Azure SQL Server不支持使用三个或四个部件名称的跨数据库查询。
您可以在官方文档中阅读更多内容:Resolving Transact-SQL differences during migration to SQL Database。
2.三部分名称格式,[database_name]。[schema_name]。[object_name],仅当database_name是当前数据库或database_name是tempdb且object_name以#开头时才受支持。
关于这个问题,我有一个想法,我想你可以尝试一下。您可以指定与本地SQL Server具有相同数据库名称和相同架构对象的目标Azure数据库实例。否则,当您的SQL Server 2016数据库迁移到Azure时,当前数据库不是[STDR]
并导致错误。
希望这可以帮助。
它只是由四部分组成的名称或三部分名称与Azure SQL数据库不兼容。您可以编写所有编程对象的脚本,然后在文本编辑器(如Notepad ++)上使用“查找和替换”将脚本上的三部分名称格式更改为两部分名称格式(dbo。[NameOfTheObjet]),然后在Azure SQL上运行该脚本用于迁移编程对象的数据库。
之后,您只能使用DMA来迁移表的架构和数据。