sql server - 一个OLE DB命令中的SSIS返回存储过程的值




sql-server stored-procedures (3)

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

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

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

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

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

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

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版本使用临时表。


我发现我可以做到这一点其实很简单:

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

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





oledbcommand