9

我正在迁移必须使用已经存在的存储过程插入的数据。存储过程具有插入行的 id 参数和返回值(来自 select 语句)。在 SSIS 的 OLE DB 命令中,我可以调用将列值作为参数传递的存储过程,并且我通常在存储过程上使用输出参数来处理“id”输出;但是我不确定当过程使用选择返回 id 值时如何使用返回值来处理这个问题。这是我之前使用的示例,但我需要获取从选择返回的值:

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

4 回答 4

14

我发现我可以做到这一点的方式实际上非常简单:

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

然后@RETURN_VALUE 将出现在可用目标列上

于 2009-02-04T13:01:35.417 回答
6

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

获取输出参数值的技巧是将派生列转换放在 OLE DB 命令之前的管道中,以引入列(映射到 SSIS 变量)以捕获过程结果。

有关如何执行此操作的屏幕截图,请参阅OLEDB 命令转换和标识列。另请参阅第一个链接中使用的垃圾目标适配器的垃圾目标适配器。这是一个方便的工具,可用于调试这样的事情。

于 2009-01-28T17:48:44.363 回答
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 版本。

于 2009-01-29T23:50:58.603 回答
0

我一直在执行 SQL 任务中使用参数映射并取得了很大的成功。SQL 语句是“EXEC nameofstoredproc ?, ? OUTPUT”,问号指定参数的位置,如果参数是输出,则为 OUTPUT。

您可以使用适当的变量名称、方向(输入、输出、ReturnValue)和数据类型来指定映射中的参数。由于您的存储过程正在通过结果集返回您想要的数据,因此请指定变量的方向以收集 ID 和版本作为 ReturnValue。它应该适合你。

于 2009-01-29T23:39:00.407 回答