gpt4 book ai didi

sql - 通过OLE DB命令将SSIS变量值作为SP的参数传递

转载 作者:行者123 更新时间:2023-12-02 09:26:30 24 4
gpt4 key购买 nike

我想问一下如何通过OLE DB命令在数据流中将SSIS变量作为使用的存储过程的参数传递?

我正在尝试将以下内容编写为SQL命令,但无法正常工作:
EXEC [dbo]。[CalculateProcess]?,?,?

收到错误:

No value given for one or more required parameters.



第一个和第二个值(?值)来自“平面文件源”作为ID和NAME。第三个应该是SSIS变量@howMany的值。我该怎么做?感谢帮助。

编辑:

假设我的数据集是:
ID NAME
1 X
2 Y
3 Z
4
5 A

在这种情况下,@ howMany应该以4结尾。如果当前NAME不为null,则每个OLE DB命令工作后,应动态更新该值。
ID NAME
1 X
@howMany = 1

2 Y
@howMany = 2

3 Z
@howMany = 3

4
@howMany = 3

5 A
@howMany = 4

编辑2:
当我确实将@howMany添加为派生列时,它的发生是这样的:
ID NAME @howMany
1 X 0
2 Y 0
3 Z 0
4 0
5 A 0

并且0值保持不变,每一行之后都不会更新。之后写OUTPUT?在SQL命令中没有解决吗?我的错误在哪里?

编辑3:存储过程是-
CREATE PROCEDURE [dbo].[CalculateProcess]
@ID int,
@name varchar(30),
@howMany int output
AS
BEGIN
SET NOCOUNT ON;
if (@name is not null)
BEGIN
set @howMany = @howMany + 1;
END
END

编辑4:我在获取平面文件源后立即添加了脚本组件。名称是INPUT参数,NameCounter是我的输出列。我的脚本是:
private int nameCounter;
public override void PreExecute()
{
nameCounter= 0;
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.Name != null)
{
nameCounter++;

}
Row.NameCounter= nameCounter;
}

脚本组件已连接到我的OLE DB命令。这将生成一个名为NameCounter的列,并将其添加到OLE DB命令中的所有数据中。现在,我只是不知道如何在这里获取NameCounter的值并将其分配给SSIS变量?

最佳答案

Derived Column之前使用OLE DB Command转换,并将变量作为新列添加到数据流中。然后,将新列用作OLE DB Command中的第三个参数。

根据更新的问题进行编辑:

好的,要执行所需的操作,可以使用脚本组件。 Here是一个示例。如果NAME列不为null,请增加脚本中howMany变量的值,然后将变量的值添加为第三列。

第二次编辑:

要更新脚本中的SSIS变量的值,请确保在脚本属性中将该变量设置为“读/写”变量,这与上面链接的文章不同。然后:

Dts.Variables["howMany"].Value = nameCounter;

关于sql - 通过OLE DB命令将SSIS变量值作为SP的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547646/

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