咨询:Azure SQL Database外部表未显示在对应文件夹的原因及解决办法
问题:Azure SQL Database创建的外部表未显示在External Tables文件夹
我正在将VM上的SQL Server 2012数据库迁移至Azure SQL Database,当前架构依赖跨库查询从不同数据库获取数据。我通过以下SQL语句创建了指向目标表的外部表:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'yourPassword'; CREATE DATABASE SCOPED CREDENTIAL yourServeradminlogin WITH IDENTITY = 'yourServeradminlogin', SECRET = 'yourPassword'; CREATE EXTERNAL DATA SOURCE RefmyDemoDB2 WITH ( TYPE=RDBMS, LOCATION='testdbdemoserver.database.windows.net', DATABASE_NAME='myDemoDB2', CREDENTIAL= yourServeradminlogin ); CREATE EXTERNAL TABLE [dbo].[Department]( [DeptId] [int] NOT NULL, [Name] [varchar](50) NULL ) WITH ( DATA_SOURCE = RefmyDemoDB2 ); -- 查询测试 SELECT * FROM [dbo].[Employee] E INNER JOIN [dbo].[Department] D ON E.DeptId = D.DeptId
但创建完成后,这个Department外部表并没有像示例中那样显示在External Tables文件夹下,而是直接出现在Tables文件夹里。请问这是什么原因?怎么才能让它显示到正确的文件夹中?
解答
别担心,这本质是数据库管理工具的显示逻辑问题,你的外部表创建是完全正确的,功能上可以正常执行跨库查询,只是工具没有正确归类而已。
为什么会出现在Tables文件夹?
- 旧版本的SQL Server Management Studio(SSMS 18.x及更早)对Azure SQL Database的外部表元数据识别支持不足,会把外部表和本地表混放在同一个Tables文件夹下。
- 如果你使用的是较旧的Azure Data Studio,也可能存在同样的显示bug。
解决方法
升级到最新版的数据库工具
这是最彻底的解决方案:安装最新版的SSMS或Azure Data Studio,新版本已经修复了这个显示问题,能准确识别外部表并将其归类到External Tables文件夹中。验证外部表的属性(确认功能正常)
如果你暂时不想升级工具,可以执行以下SQL语句确认这确实是一个外部表:SELECT t.name AS table_name, t.is_external FROM sys.tables t WHERE t.name = 'Department'如果返回的
is_external值为1,就说明表的外部属性是正常的,只是显示归类的问题,完全不影响使用。刷新对象资源管理器
有时候只是工具没有及时同步元数据,右键点击你的Azure SQL数据库节点,选择刷新,之后再查看文件夹,可能就能看到外部表出现在正确的位置了。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

