如何使用Elastic Job从另一个数据库访问一个数据库的数据?

时间:2020-03-10 07:42:02

标签: sql-server azure-sql-database jobs azure-elasticpool

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

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

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'.

1 个答案:

答案 0 :(得分: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中的表: enter image description here

有关更多详细信息,请参见此处:Get started with cross-database queries (vertical partitioning) (preview)

希望这会有所帮助。