ODBC 驱动程序查询外部表时出错

问题描述 投票:0回答:2

我已经在 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]对象名称无效

azure-sql-database azure-data-studio
2个回答
1
投票

我收到此错误:

消息 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;

输出:


0
投票

非常感谢上面的回答,这对我来说是一个巨大的帮助。

就我而言,我做错的是,在创建外部表时,我更改了表的名称(以区分远程表和外部表),而没有在数据源后的WITH子句中指定架构名称和对象名称名字。

因此,我收到了无效对象名称的错误,即尝试查询原始数据库中不存在的表名称!!

我尝试在WITH子句中添加架构名称和对象名称以及数据源名称,同时创建名称与原始名称不同的外部表;我能够通过跨数据库查询达到预期的结果

© www.soinside.com 2019 - 2024. All rights reserved.