我已经在 Azure SQL 中设置了一个外部表,以便根据此处的文档执行弹性查询 https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-query-overview?view=azuresql
我可以在 Azure Data Studio 中看到外部表,但是当我选择数据时出现以下错误:
消息 46833,第 16 级,状态 2,第 1 行
在远程服务器上执行查询时出错:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]对象名称无效
我收到此错误:
消息 46833,第 16 级,状态 2,第 1 行
在远程服务器上执行查询时发生错误:
[Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL Server]对象名称无效
确保您的连接正确,如果您连接到任何其他数据库,您会得到
对象名称无效
某种错误,因为您想要的对象不存在于该数据库中。
我们在我们的环境中重现了同样的事情,我们可以从外部表中选择数据。
示例代码:
创建主密钥
CREATE MASTER KEY;
创建范围凭证
CREATE DATABASE SCOPED CREDENTIAL ElasqurDb12
WITH IDENTITY = 'username', SECRET = 'password';
创建外部数据源
CREATE EXTERNAL DATA SOURCE MyElASqurDC12 WITH
(
TYPE = RDBMS,
LOCATION = 'servername.database.windows.net',
DATABASE_NAME = 'demo2',
CREDENTIAL = ElasqurDb12,
);
创建外部表
CREATE EXTERNAL TABLE Persons12
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
WITH
(
DATA_SOURCE = MyElASqurDC12,
SCHEMA_NAME = 'dbo',
OBJECT_NAME = 'Persons'
);
从外部表中选择
SELECT *
FROM Persons12;
输出:
非常感谢上面的回答,这对我来说是一个巨大的帮助。
就我而言,我做错的是,在创建外部表时,我更改了表的名称(以区分远程表和外部表),而没有在数据源后的WITH子句中指定架构名称和对象名称名字。
因此,我收到了无效对象名称的错误,即尝试查询原始数据库中不存在的表名称!!
我尝试在WITH子句中添加架构名称和对象名称以及数据源名称,同时创建名称与原始名称不同的外部表;我能够通过跨数据库查询达到预期的结果