我有一组使用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'
答案 0 :(得分:2)
显示的use
语句适用于只有一个数据容器的数据库。在这种情况下,只有一个数据容器可以处理问题,一切运行顺利。
使用Invantive SQL中的分布式查询,您需要指定要使用哪个数据容器的use语句。否则,第一个数据容器将尝试处理它(在这种情况下可能是没有分区概念的Freshdesk)。这类似于将数据容器别名附加到每个表中,如:
select ...
from table@eolnl
join table2@freshdesk
on ...
此处eolnl
和freshdesk
指定了表格的查找位置。
因此,在这种情况下使用:
use 123123@eolnl
同样适用于set
声明。
答案 1 :(得分:0)
您的代码中似乎有多个数据容器在您的连接中运行。在用户界面中,您只能在默认数据容器上设置分区。
但是,有一个简单的代码解决方案可供使用。您必须知道要为其设置分区的数据容器的别名。 use
调用中的别名用法(在此示例123123
中是您要选择的分区):
use 123123@eolnl
或者使用所有可用的分区:
use all@eolnl