0

我正在尝试将数据从一个数据库访问到另一个数据库。为此,我正在使用弹性作业。使用弹性作业我要创建从一个数据库到另一个数据库的表。但无法访问数据或传输数据。我尝试使用外部数据源和外部表。

我使用了以下代码:外部数据源

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
    TYPE=RDBMS,
    LOCATION='myserver',
    DATABASE_NAME='dbname',
    CREDENTIAL= JobRun
);

CREATE EXTERNAL TABLE [tablename] (
[Id] int null,
[Name] nvarchar(max) null
) 
WITH (

     DATA_SOURCE = RemoteReferenceData,
     SCHEMA_NAME = N'dbo', 
OBJECT_NAME = N'mytablename'

);

出现以下错误:

> Error retrieving data from server.dbname.  The underlying error
> message received was: 'The server principal "JobUser" is not able to
> access the database "dbname" under the current security context.
> Cannot open database "dbname" requested by the login. The login
> failed. Login failed for user 'JobUser'.
4

1 回答 1

0

您的陈述中有一些错误:

  1. LOCATION 值应为:LOCATION='[servername].database.windows.net'

  2. 确保在创建时CREDENTIAL“用户名”和“密码”应该是用于登录客户数据库的用户名和密码。当前不支持使用带有弹性查询的 Azure Active Directory 进行身份验证

整个 T-SQL 代码示例应该是这样的:

CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
 WITH IDENTITY = 'Username',
 SECRET = 'Password';  

 CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
    (TYPE = RDBMS,
    LOCATION = '[servername].database.windows.net',
    DATABASE_NAME = 'Mydatabase',
    CREDENTIAL = ElasticDBQueryCred,
) ;

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
( [CustomerID] [int] NOT NULL,
  [CustomerName] [varchar](50) NOT NULL,
  [Company] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)


SELECT * FROM CustomerInformation

我使用代码Mydatabase从以下位置查询表DB1在此处输入图像描述

有关更多详细信息,请参阅此处:跨数据库查询入门(垂直分区)(预览版)

希望这可以帮助。

于 2020-03-17T07:17:00.960 回答