【发布时间】:2019-12-19 15:17:47
【问题描述】:
我正在寻找一种更好的方法将数据从 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
【问题讨论】:
-
如果 HANA 数据库使用的是最新版本,您可能使用的是 租户 数据库。仅使用 IP 和默认端口(例如 00)连接可以连接到 SystemDB - 这就是您的应用程序表不存在的原因。
-
但我不是。链接服务器连接和外部表数据源连接都连接到相同的 IP 和端口#
-
好吧,查看来自 SQL Server 的错误消息(之前应该这样做),我注意到,它尝试在您的架构
RAMBLER中查找表,而不是使用提供的架构名称.在 SQL Server 文档中,Oracle 的示例在Location参数的架构名称前包含一个额外的点.。所以也许可以尝试 `Location='."SAPABAP1"."TCURR"' 让 SQL Server 使用架构名称。 -
谢谢 - 我会试试,明天告诉你,@LarsBr。
标签: sql-server hana external-tables