我有两个SQL服务器,两个服务器都有相同的表,名称为“[TABLE-A]”。我所要做的是,我想在[SERVER 2].[TABLE-A]中保持与[SERVER 1].[TABLE-A]中相同的精确记录。无论何时插入或删除任何记录[SERVER 1].[TABLE-A],我都需要在[SERVER 2].[TABLE-A]中执行相同的操作。因此,我创建了两个查找活动,分别命名为“Lookup 1”和“Lookup 2”。从Lookup 1中,我从下面的查询中获得[SERVER 1].[TABLE-A]中存在的所有唯一ID。
SELECT DISTINCT Id from [SERVER1].[TABLE-A]
它给了我一个包含所有70个不同ID的列。
我的想法是在Lookup 2中使用这个ID,并删除Lookup 1输出中不存在的ID。
DELETE FROM [SERVER2].[TABLE-A] WHERE Id NOT IN ('@{activity('Lookup1').output.value[0].Id}')
但是我无法将这70个ID放入('@{activity(' Lookup 1 ').output.value[0].Id}'),因为我以这种方式指定,所以它只从这70个ID中获取1个值。我如何将这70个ID放入Lookup 2查询中?
1条答案
按热度按时间j8ag8udp1#
查找活动输出将为数组类型。查找活动输出数据示例:
表达式
@{activity('Lookup1').output.value[0].Id}
将只给予第一个值。为了将查找活动中的所有值都提供给SQL查询,需要对lookup1数据进行一些更改{"id":
和}
将从数据中删除,[
和]
将分别替换为(
和)
。因此,上述数据将变为(1,3,4)
。要做到这一点,需要使用字符串类型的变量v1,并将该变量的值设置为
@{activity('Lookup1').output.value}
。变量v2(字符串类型)被采用,在这个变量中,所有不需要的数据都从v1中删除。其值为
@{replace(replace(replace(replace(variables('v1'),'{"id":',''),'}',''),'[','('),']',')')}
。然后执行lookup activity2,查询如下所示
这将从
emp1
中选择lookup1
表中可用的行。删除sql命令也可以类似地编写。