使用SQL插入/更新Contact到Freshdesk时验证失败错误

时间:2016-10-26 07:18:47

标签: sql freshdesk invantive-sql invantive-control

我想使用Excel全部的Invantive Control通过API更新Freshdesk中的现有联系人。 Invantive Control会引发验证错误,即电子邮件地址和电话应该是唯一的:Validation failed duplicate_value: email. It should be a unique value

目前尚不清楚Invantive Control的SQL是否转换为CREATEPUT命令。如果是PUT,则应该可以更新已存在的联系人。

我的SQL声明:

insert into contacts@freshdesk
( name
, address
, phone
, email
)
select deliveryaccountname
,      fulladdress
,      phone
,      email
from   FreshdeskTickets@inmemorystorage

1 个答案:

答案 0 :(得分:1)

insert语句contacts表中创建新行,它不会修改现有行。您似乎正在尝试创建Freshdesk实例中已存在的联系人。

我建议如下:

  • 根据用户的电子邮件地址插入故障单。这看起来很奇怪,但可能是因为Freshdesk API在为该用户创建故障单之前实际检查是否存在联系人;
  • 然后update现有联系人,过滤掉不需要更新的联系人。您可以使用minus执行操作。为了便于使用,我将创建一个新的临时表来存储更新。

像这样:

create table contacts_to_update@inmemorystorage
as
select distinct deliveryaccountname
,      fulladdress
,      phone
,      email
from   FreshdeskTickets@inmemorystorage
minus
select name
,      address
,      phone
,      email
from   contacts@freshdesk

然后更新(请注意,from语法在公开发布中尚未提供):

update contacts@freshdesk cfd
set    cfd.name = cto.name
,      cfd.address = cto.address
,      cfd.phone = cto.phone
from   contacts_to_update@inmemorystorage cto
where  cto.email = cfd.email

临时解决方案是仅插入那些尚不存在的联系人。 minus也适用于contacts上的插入,如下所示:

insert into contacts@freshdesk
( name
, address
, phone
, email
)
select deliveryaccountname
,      fulladdress
,      phone
,      email
from   FreshdeskTickets@inmemorystorage
minus
select name
,      address
,      phone
,      email
from   contacts@freshdesk