我正在尝试进行跨数据库查询,但我的错误建议我甚至无法连接到我的外部数据源。
我的确切错误消息如下:
Error retrieving data from shard [DataSource=xxxxxxxxxxxxxxxxxx Database=CRDMPointOfSale_Configuration]. The underlying error message received was: 'Login failed for user 'CRDMAdmin'.'.
以下是我的'Create Database Scoped Credential'。
CREATE DATABASE SCOPED CREDENTIAL CRDMCred
WITH IDENTITY = 'CRDMAdmin',
SECRET = 'xxxxxxxxxx';
GO
以下是我的'创建外部数据源'。
CREATE EXTERNAL DATA SOURCE CRDM_Configuration
WITH (
TYPE=RDBMS,
LOCATION='xxxxxxxxxxxxxxxxxxxxx',
DATABASE_NAME='CRDMPointOfSale_Configuration',
CREDENTIAL = CRDMCred
);
下面你可以看到我的execute remote语句在一个存储过程中。我在网上看到的其他地方。
CREATE PROCEDURE [admin].[InsertThreadProcessingDataIntoLoadTable]
(
@ThreadID VARCHAR(100)
, @DataLoadSchemaID INT OUTPUT
, @DateFrom CHAR(8) OUTPUT
, @DateTo CHAR(8) OUTPUT
, @DatabaseName VARCHAR(100)
)
AS BEGIN
SET NOCOUNT ON
DECLARE @IsBatchLoad BIT
SET @IsBatchLoad = CASE 'NO' WHEN 'YES' THEN 1 ELSE 0 END
Exec sp_execute_remote @data_source_name = N'CRDM_Configuration',
@stmt = N'SELECT @DateFrom = CONVERT(CHAR(8),FromDate,112), @DateTo = CONVERT(CHAR(8),DATEADD(DAY,1,ToDate),112)
FROM [admin].[GetFromAndToDatesForDatabase] (@DatabaseName, @IsBatchLoad,NULL)',
@params = N'@DatabaseName VARCHAR(100), @IsBatchLoad BIT',
@DatabaseName = 'CRDMPointOfSale', @IsBatchLoad = 1;
END
正如您在上面看到的那样,execute remote包含一个SELECT语句,FROM是一个函数被调用的结果([admin]。[GetFromAndToDatesForDatabase])来自不同的数据库,这就是为什么我有一个'Exec sp_execute_remote ' 包起来。
我不应该在不直接呼叫SP时指定参数吗?我做错了什么?