我有一个带有数据流任务的SSIS包。 OLE DB源具有execute proc语句。使用以下错误消息保存时失败。
an OLEDB record is available... The metadata could not be determined because the statement 'select appname....' in procedure is not compatible with the statement 'select appid....' in procedure
此proc有几个select语句,并根据传递的参数返回相应的结果集。是否有任何指针绕过此错误?
答案 0 :(得分:0)
所以你说SP会根据传递的参数返回不同的元数据吗? SSIS不喜欢这样 - 它无法在运行时动态更新元数据。即,如果您创建一个在某个列上拆分或排序的包,那么您运行SP并且它不会返回该列,或者同一列是不同的数据类型,SSIS应该怎么做?它无法自动解决。
我建议您为每个返回的结果集创建一个数据源,并根据需要有条件地执行每个结果集。
简而言之,SP返回可选的不同数据集通常不是一个好主意,绝对不是从ETL的角度来看。
以下是一些代码,展示了如何创建动态构建的输出,(您可以只使用一个输出使用相同的方法),但是您仍将面临下游的相同问题。
http://www.codeproject.com/Articles/32151/How-to-Use-a-Multi-Result-Set-Stored-Procedure-in
答案 1 :(得分:0)
我也遇到了这个问题。在我的情况下,无论执行哪个分支,返回的结果看起来都是相同的,区别仅在于如何获得该结果(包括不同的源表)。我只是简单地用一个联合执行所有的案例,每个"其中"条款包括执行条件而不是使用" if"选择查询的逻辑。