SAP HANA的Sql Server 2019外部表忽略Location子句中的架构

我正在寻找一种更好的方法将Hana中的数据引入我们的Sql Server EDW。当前,我们正在使用OpenQuery,但是我真的很想使用Sql Server的外部表功能,因为这样我就可以轻松地将许多计算需求降低到Hana,而无需创建复杂查询字符串。

但是,我的第一次尝试被证明是令人沮丧的,因为某些事情显然决定始终使用我的默认模式,而不是我提出的模式。

这是我用来从我们的一个Hana实例中撤回SAPABAP1.TCURR的测试代码(某些细节由于通常的原因而被遮盖了)

If Object_Id('SAP.TCURR') Is Not Null
    Drop External Table SAP.TCURR;
Go
If Exists (Select 1 From sys.external_data_sources Where name = 'SAPHANA_HNQ')
    Drop External Data Source SAPHANA_HNQ;
Go
If Exists (Select 1 From sys.database_credentials Where name = 'Me@Hana')
    Drop Database Scoped Credential Me@Hana;
Go
Create Database Scoped Credential Me@Hana With
     Identity = 'rambler',Secret = '**SuperSecretSquirrelPassword**';
Go
Create External Data Source SAPHANA_HNQ With
    (
         Location ='ODBC://10.10.10.10:30015',Credential = Me@HANA,Pushdown = On,Connection_Options = 'Driver={HDBODBC};ServerNode=10.10.10.10:30015'
    );
Go
Create External Table SAP.TCURR
    (
         MANDT NVarChar(3)      Not Null,KURST NVarChar(4)      Not Null,FCURR NVarChar(5)      Not Null,TCURR NVarChar(5)      Not Null,GDATU NVarChar(8)      Not Null,UKURS Numeric(9,5)    Not Null,FFact Numeric(9,0)    Not Null,TFact Numeric(9,0)    Not Null
    ) With
    (
         Data_Source = SAPHANA_HNQ,Location = '"SAPABAP1"."TCURR"'
    );

Go
Select   *
  From   SAP.TCURR;

但是,执行此操作时,出现以下错误:

Msg 7320,Level 16,State 110,Line 28
Cannot execute the query "Remote Query" against OLE DB provider "MSOLEDBSQL" for linked server "(null)". 105082;Generic ODBC error: [SAP AG][LIBODBCHDB DLL][HDBODBC] Base table or view not found;259 invalid table name:  Could not find table/view TCURR in schema RAMBLER: line 1 col 77 (at pos 76) .

我在做什么错,这使驱动程序想要使用我的模式rambler,而不是我给它的模式SAPABAP1?我还尝试将Location定义为SAPABAP1.TCURR,但这差异为零。

为进行记录,以下OpenQuery返回的数据很好:

Select * From OpenQuery(SAPHANA_HNQ,'Select * From "SAPABAP1"."TCURR"');

Sql Server 2019 RTM

pes2011 回答:SAP HANA的Sql Server 2019外部表忽略Location子句中的架构

您可以尝试定义远程端的架构和对象吗?

) With
(
     Data_Source = SAPHANA_HNQ,SCHEMA_NAME = 'SAPABAP1',OBJECT_NAME = 'TCURR'  
);
,

这些对我有用

位置='.SAPABAP1.TCURR'

本文链接:https://www.f2er.com/2890952.html

大家都在问