我正在尝试将数据从一个数据库访问到另一个数据库,为此我正在使用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'.
答案 0 :(得分:0)
您的陈述中有一些错误:
LOCATION值应为:LOCATION='[servername].database.windows.net'
请确保在创建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
有关更多详细信息,请参见此处:Get started with cross-database queries (vertical partitioning) (preview)
希望这会有所帮助。