azure 如何将一个查找活动的输出用于ADF中的另一个查找活动?

bgtovc5b  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(206)

我有两个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查询中?

j8ag8udp

j8ag8udp1#

查找活动输出将为数组类型。查找活动输出数据示例:

{
    "value": [
        {
            "id": 1
        },
        {
            "id": 3
        },
        {
            "id": 4
        }
    ]
  }

表达式@{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,查询如下所示

select * from emp1 where id in @{variables('v2')}

这将从emp1中选择lookup1表中可用的行。删除sql命令也可以类似地编写。

相关问题