我迁移具有使用已经存在的存储过程要插入的数据。该存储过程对插入的行的ID的参数和返回值(从SELECT语句)。在一个OLE DB命令在SSIS我可以调用存储过程传递的列值作为参数和我通常使用的存储过程的输出参数来处理“ID”输出;但我不能确定如何能与返回值时,过程使用SELECT返回id的值来处理。下面是我所使用的作品,其前一个例子,但我需要拿起从选择返回值:

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
有帮助吗?

解决方案

我发现我能做到这一点这实际上是很简单的方式:

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

和再@RETURN_VALUE将出现在可用目标列

其他提示

不要使用在SQLCommand属性的变量名,只是问号和“OUT”或“输出”标签输出参数。

用于抓取的输出参数值的窍门是把一个派生列变换在管道前面的OLE DB命令的引入柱(映射到SSIS变量)来捕获过程的结果。

请参阅 OLEDB转型司令部和身份列了解一个很好的概述与如何做到这一点的屏幕帽。还请参见用于在第一链路使用的垃圾箱目标垃圾桶目的适配器。它拥有可用于调试这样的事情一个方便的工具。

如果所存储的过程返回一个结果,则需要以捕获它:

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

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

SELECT * FROM @results 

注:我使用的表的变量。您可能需要使用临时表取决于你的SQL Server版本。

我一直使用执行SQL任务中的参数映射以很多成功的。该SQL语句是“EXEC nameofstoredproc?,?输出”,用问号指定参数和输出的位置,如果该参数是一个输出。

您在用适当的变量名称,方向(输入,输出,返回值)和数据类型的映射指定参数。由于您的存储过程将返回你通过一个结果集所需的数据,然后指定变量收集ID和版本作为返回值的方向。它应该只是正常工作适合你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top