我正在迁移必须使用已存在的存储过程插入的数据。存储过程具有参数和插入行的id的返回值(来自select语句)。在SSIS中的OLE DB命令中,我可以调用存储过程传递列值作为参数,我通常使用存储过程的输出参数来处理“id”输出;但是当程序使用select来返回id值时,我不确定如何使用返回值来处理这个问题。这是我之前使用过的一个例子,但我需要从select:
中获取返回的值exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
答案 0 :(得分:12)
我发现我能做到这一点的方式实际上非常简单:
exec ? = dbo.StoredProc @param = ?, @param2 = ?
然后@RETURN_VALUE将出现在可用目标列
上答案 1 :(得分:6)
不要在SqlCommand属性中使用变量名,只能使用问号以及输出参数的“OUT”或“OUTPUT”标签。
获取输出参数值的技巧是在OLE DB命令之前的管道中放置派生列转换以引入列(映射到SSIS变量)以捕获过程结果。
有关如何执行此操作的屏幕上限的详细信息,请参阅OLEDB Command Transformation And Identity Columns。另请参阅Trash Destination Adapter了解第一个链接中使用的垃圾目的地。这是一个方便的工具,可用于调试这样的事情。
答案 2 :(得分: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版本。
答案 3 :(得分:0)
我总是在执行SQL任务中使用参数映射并取得了很大的成功。 SQL语句是“EXEC nameofstoredproc?,?OUTPUT”,如果参数是输出,则带有指示参数位置的问号和OUTPUT。
使用适当的变量名称,方向(输入,输出,ReturnValue)和数据类型指定映射中的参数。由于存储过程通过结果集返回所需的数据,因此请指定变量的方向以将ID和版本收集为ReturnValue。它应该对你有用。