我在sql命令中使用以下查询来自变量来从两个不同的表中获取数据。
SELECT x.*, y.col1, y.col2
FROM table1 AS x
INNER JOIN table2 AS y ON y.AccID = x.accID
根据我的业务逻辑,我需要将查询用作 sql命令来自变量。 在将 DelayValidation 设置为 True 后运行包时,我收到以下错误:
"[OLE source **table1**]] Warning: The external columns for component
"OLE source" (1) are out of synchronization with the data source columns.
The external column "**col2**" (601) needs to be removed from the external columns.
The external column "**Col1**" (598) needs to be removed from the external columns."..
[SSIS.Pipeline] Error: "component "OLE source **table1** " (1)" failed validation
and returned validation status "VS_NEEDSNEWMETADATA".
答案 0 :(得分:2)
SQL中的更改会影响OLE Source组件的设置。您需要重新访问SQL输出的列分配。此外,您还必须检查目标SSIS组件,以查看是否存在任何会对其产生影响的更改。每次更改SQL时,都要养成仔细检查sql-column-to-component-column赋值的习惯。
Warning: The external columns for component
"OLE source" (1) are out of synchronization with the data source columns.
表示检测到组件发生了变化。将 DelayValidation 设置为TRUE只表示在设计时不会进行任何组件验证。
The external column "**col2**" (601) needs to be removed from the external columns.
The external column "**Col1**" (598) needs to be removed from the external columns."..
会帮助您指明作业可能出错的方向。看起来你可能有可能在执行包之前减少列数或添加它们。这是组件验证的严格性到位的地方 - 您也有可能只更改了SQL命令的大小写(在这种情况下可能是列名),而且仅此一项可以触发"VS_NEEDSNEWMETADATA"
。
再次,重新检查组件的列分配,如果更改源组件列设置中的任何部分,它也会影响目标(如果有的话,还会影响其间的其他数据转换)。