SSIS中使用OLE DB Command返回存储过程的返回值

10

我正在迁移需要使用已经存在的存储过程插入的数据。存储过程具有参数以及一个用于返回插入行的ID的select语句的返回值。在SSIS中的OLE DB Command中,我可以调用存储过程并将列值作为参数传递,我通常在存储过程上使用输出参数来处理“id”输出;但是当该过程使用select返回id值时,我不确定如何处理返回值。以下是我之前使用过的示例,它可以正常工作,但我需要获取从select返回的值:

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
4个回答

16

我发现可以这样做,实际上非常简单:

exec ? = dbo.StoredProc @param = ?, @param2 = ?

然后“@RETURN_VALUE”将出现在可用目标列中


1
我需要在参数映射部分使用参数名称0(http://sql313.com/index.php/39-main-blogs/maincat-dba/reporting-analytics/cat-ssis/43-ssis-stored-proceduress-with-return-values) - Mark Sowul

7
不要在SqlCommand属性中使用变量名称,只需使用问号和“OUT”或“OUTPUT”标签来表示输出参数。
抓取输出参数值的技巧是在OLE DB命令之前在管道中放置一个派生列转换,引入一列(映射到一个SSIS变量),以捕获过程结果。
请参见OLEDB Command Transformation And Identity Columns,了解如何执行此操作的概述和屏幕截图。还可以查看Trash Destination Adapter,了解第一个链接中使用的Trash Destination。这是一个方便的工具,可用于调试此类问题。

感谢您的回答,不过也许我在问题中没有准确地解释我需要做什么。我使用的上述代码可以工作,并且如果该过程具有输出参数,则可以获取值。问题是,用于此数据库的存储过程只是调用 select 来获取值。 - bobwah
很抱歉,我不确定问题是什么。问题是您没有通过输出参数传递选择的结果,而是需要一种方法来获取存储过程的结果集吗? - John Mo

1

我一直以来都非常成功地使用Execute SQL任务中的参数映射。SQL语句是"EXEC nameofstoredproc ?, ? OUTPUT",问号指定了参数的位置,如果参数是输出,则为OUTPUT。

您可以使用适当的变量名称、方向(输入、输出、返回值)和数据类型在映射中指定参数。由于您的存储过程通过结果集返回所需的数据,因此请将变量的方向指定为ReturnValue以收集ID和版本。这对您应该没有问题。


1

如果存储过程返回结果集,则需要捕获它:

DECLARE @results TABLE (
    [ID] INT NOT NULL
)

INSERT @results ([ID])
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output

SELECT * FROM @results 

注意:我使用了一个TABLE变量。根据你的SQL Server版本,你可能需要使用一个临时表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接