我有一组SQL语句,使用Invantive SQL的分布式选项,从Exact Online中提取发货信息,并在Freshdesk中为每个发货序列号创建一张票,并将消费者作为联系人。
当在一个登录代码下连接到Exact Online和Freshdesk时,这可以很好地工作。但是,最终用户使用不同的登录代码。在这种情况下,SQL语句集从Exact Online中的测试部门而不是正确的生产部门检索数据。
当不使用分布式选项时,我可以使用更改分区
use 123123
其中,123123
是Exact Online国家/地区的唯一部门编号。
当连接到Exact Online和Freshdesk时,我会得到一个:
itgenuse002: List of partitions could not be determined.
如何强制为特定的Exact Online分区执行SQL语句集,而不是为登录代码执行默认的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'
显示的use
语句适用于只有一个数据容器的数据库。在这种情况下,只有一个数据容器可以处理这个问题,并且一切都很顺利。
对于InvantiveSQL中的分布式查询,您需要指示使用哪个数据容器的use语句。否则,第一个数据容器将尝试处理它(在这种情况下,可能是没有分区概念的Freshdesk(。这类似于将数据容器别名附加到每个表,如中所示
select ...
from table@eolnl
join table2@freshdesk
on ...
这里eolnl
和freshdesk
指定了应该在哪里查找表。
因此,在这种情况下使用:
use 123123@eolnl
set
语句也是如此。
从您的代码来看,您的连接中似乎运行了多个数据容器。从用户界面,您只能在默认数据容器上设置分区。
但是,有一个简单的代码解决方案可以使用。您必须知道要为其设置分区的数据容器的别名。在use
调用中使用该别名(在本示例中,123123
是您想要选择的分区(:
use 123123@eolnl
或者使用所有可用分区:
use all@eolnl