在使用带有Invantive SQL的分布式查询时,选择Exact Online的不同部门

时间:2016-11-07 10:09:47

标签: sql exact-online freshdesk invantive-sql

我有一组使用Invantive SQL分布式选项的SQL语句,它从Exact Online中提取出货信息,并为Freshdesk中的每个序列号创建一张票,并与消费者一起作为联系人。

在一个登录代码下连接到Exact Online和Freshdesk时,此工作正常。但是,最终用户使用不同的登录代码。在这种情况下,SQL语句集将从Exact Online中的测试部门检索数据,而不是正确的生产部门。

当不使用分布式选项时,我可以使用以下方式更改分区:

use 123123

其中123123是精确在线国家/地区的唯一分部编号。

当连接到Exact Online和Freshdesk时,我得到一个:

itgenuse002: List of partitions could not be determined.

如何强制执行特定Exact Online部门的SQL语句集,而不是当时为登录代码设置的默认值?

显示问题的示例SQL查询:

create or replace table fulladdress@inmemorystorage --STAP 1.
as 
select acad.id
,      acad.name
,      acad.phone
,      acad.email
,      acad.addressline1 || '   ' || acad.postcode || '   ' || acad.city fulladdress
from   ExactonlineREST..Accounts@eolnl acad 
where  acad.status = 'C'

2 个答案:

答案 0 :(得分:2)

显示的use语句适用于只有一个数据容器的数据库。在这种情况下,只有一个数据容器可以处理问题,一切运行顺利。

使用Invantive SQL中的分布式查询,您需要指定要使用哪个数据容器的use语句。否则,第一个数据容器将尝试处理它(在这种情况下可能是没有分区概念的Freshdesk)。这类似于将数据容器别名附加到每个表中,如:

select ...
from   table@eolnl
join   table2@freshdesk
on     ...

此处eolnlfreshdesk指定了表格的查找位置。

因此,在这种情况下使用:

use 123123@eolnl

同样适用于set声明。

答案 1 :(得分:0)

您的代码中似乎有多个数据容器在您的连接中运行。在用户界面中,您只能在默认数据容器上设置分区。

但是,有一个简单的代码解决方案可供使用。您必须知道要为其设置分区的数据容器的别名。 use调用中的别名用法(在此示例123123中是您要选择的分区):

use 123123@eolnl

或者使用所有可用的分区:

use all@eolnl