gpt4 book ai didi

sql - ADF - 迭代选择输出到复制事件

转载 作者:行者123 更新时间:2023-12-02 06:37:10 26 4
gpt4 key购买 nike

我们有一个 SP,其中 SP 执行并返回多个结果集,其中列号发生变化,如下所示:

create proc test ab
as
select 1 as num1
select 1 as num1, 2 as num2
select 1 as num1, 2 as num2,3 as num3

应使用 ADF 将以下屏幕截图中的输出移至多个表。我们如何实现这一目标?

enter image description here

注意:SP 无法更改,这是一个示例脚本。

最佳答案

如果过程与您描述的完全一样,则新的 Script activity支持多个结果集,并且可以与 For Each activity 结合使用或多个脚本事件并行遍历它们并将它们加载到数据库表中。请记住,脚本事件(就像 Lookup activity )仅限于 5,000 行和 2MB 数据,因此它不适用于大规模数据导入,并了解它与复制事件有根本的不同:它将数据拉入您必须操作的管道中。

一个简单的例子:

enter image description here

第一个脚本事件只是调用返回多个结果集的存储过程。该事件的输出大致如下所示:

{
"resultSetCount": 3,
"recordsAffected": 0,
"resultSets": [
{
"rowCount": 1,
"rows": [
{
"num1": 1
}
]
},
{
"rowCount": 1,
"rows": [
{
"num1": 1,
"num2": 2
}
]
},
{
"rowCount": 1,
"rows": [
{
"num1": 1,
"num2": 2,
"num3": 3
}
]
}
],
"outputParameters": {},
...

正如您所看到的,您的多个结果集现在正在管道中并且可以进行操作。结果集是从 0 开始的,因此第一个结果集(仅返回 num1)是 resultSets[0],可以使用以下语法引用它们:

activity('Script0').output.resultSets[0]

因此,对于每个脚本事件,我们的语句略有不同:

Script0 - 调用存储过程:

EXEC usp_multipleResultSets;

脚本1 - 加载结果集0:

@concat('INSERT INTO dbo.multipleResultSets ( num1, dateAdded ) SELECT ', activity('Script0').output.resultSets[0].rows[0].num1, ', GETDATE();' )

脚本2 - 加载结果集1:

@concat('INSERT INTO dbo.multipleResultSets ( num1, num2, dateAdded ) SELECT ', activity('Script0').output.resultSets[1].rows[0].num1, ', ', activity('Script0').output.resultSets[1].rows[0].num2, ', GETDATE();' )

Script3 - 加载结果集 2:

@concat('INSERT INTO dbo.multipleResultSets ( num1, num2, num3, dateAdded ) SELECT ', activity('Script0').output.resultSets[2].rows[0].num1, ', ', activity('Script0').output.resultSets[2].rows[0].num2, ', ', activity('Script0').output.resultSets[2].rows[0].num3, ', GETDATE();' )

对于脚本 0,脚本类型应设置为 Query,但对于其他脚本可以设置为 NonQuery

NB 脚本任务允许您使用加号 (+) 按钮添加多个脚本,但它们随后会串行运行。我在这里使用三个,因为我希望这三个 SQL 项目并行运行。

关于sql - ADF - 迭代选择输出到复制事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71793165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com