我正在寻找一种更好的方法将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