简而言之: 我可以调用在数据流中具有输出参数的存储过程吗?
长期: 我有很多表可以从一个db提取,转换和加载到另一个db。 几乎所有的表都需要一个修改国家代码的转换(从3个字母到2个字母)。所以我的想法如下: 对于每一行:调用存储过程,传递错误的国家代码,用正确的代码替换错误的代码(存储过程的输出)
答案 0 :(得分:4)
至少有两种解决方案:
后者(OLEDB Command)实际上非常简单,您需要配置它:
EXEC ? = dbo.StoredProc @param1 = ?, @param2 = ?
因此,@ RETURN_VALUE将出现在可用目标列上,然后您可以映射到管道中的现有列。请记住在OLEDB组件之前使用派生列组件创建新的管道字段/列(例如Good_Country_Code),并且您将有机会同时拥有这两个值,或者在OLEDB命令之后使用另一个派生列组件替换错误的组件。
答案 1 :(得分:2)
不,原则上没有一个组件可以处理它。您可以使用脚本组件完成它,但您不想这样做。
你所描述的是一个查找。数据流任务有一个查找组件,但您会得到更好的服务,特别是对于像您所查询到组件的国家这样的有限值列表。
SELECT T.Country3,T.Country2 FROM dbo.Table T;
然后拖动SourceCountry列并匹配Country3。检查Country2,对于匹配的所有行,您将获得2个字母的缩写。
尝试使用存储过程的一大缺点是效率。默认Lookup将缓存所有这些值。使用脚本版本,假设您有10k行,所有行都使用CAN
。这是对存储过程的10k调用,结果永远不会改变。
您确实支付了启动成本,因为默认的查找模式是完全缓存,这意味着它将运行您的查询并将所有这些值保持为本地。这对您的数据集很有用:最多1000个国家/地区,每行5或10个字节。没什么。
答案 2 :(得分:0)
是的,你可以。您将要使用几个执行SQL任务来执行此操作。
Wrong_Country_Code
s的结果集。 Wrong_Country_Code
)作为变量参数。那应该有用。只选择传递给存储过程所需的列。
修改强>
对另一个答案的承认,表现将成为一个问题。也许不是让存储过程产生输出,而是改变sproc来为你做更新。