数据源在删除和添加后保留模式

时间:2013-10-08 19:13:23

标签: ssis

我有几个几乎相同的包。仅在不同数据库版本中添加/删除的列不同。当我复制一个包并修改副本的数据流时,我删除了OLE DB数据源并添加了一个新的。一旦定义了新的预览,其预览就会准确显示我的期望。但是,列来自已删除的OLE DB源。这就像它被缓存在某个地方。

似乎我需要关闭软件包并在删除数据源后重新打开它。有没有其他方法来清除这个缓存状态?内部会发生什么导致这种情况发生?

更多......看起来它是参数化的连接管理器,它会保留以前的参数,直到包关闭并重新打开。

1 个答案:

答案 0 :(得分:1)

如果我了解您的工作流程,您将复制并粘贴包,然后在数据流中调整源定义。挑战在于,一个系统中的CustomerID是varchar(7),在另一个系统中定义为varchar(12)。 “技巧”变得让设计引擎识别元数据变化并相应地表现。

我通常的黑客从根本上改变了源头。我发现使用查询SELECT 1 as foo可以解决问题。执行此操作后,OLE DB Source组件的元数据将删除对现有列的所有引用,这些列将渗透到下游组件。然后我切换回正确的源并双击第一个红色X,让它将ID从旧映射到新。

如果您想要比内战手术更多的脑外科手术路线,请更改源中的列名,以查找应该注册元数据更改的任何内容。因此SELECT T.MyColumn, T.IsFine FROM dbo.MyTable AS T变为SELECT T.MyColumnX, T.IsFine FROM dbo.MyTable AS T现在只有第一列在整个数据流中变得奇怪。将其重置为“正确”的列名,一切都很好。

在内部,我不知道,但这绝不会阻止我猜测。验证启动后,SSIS引擎识别出数据类型仍然兼容,因此它不会更改现有元数据。一个不再存在的列足以让它坐起来注意,因此缓存的大小消失了。

有些人喜欢尝试使用“高级”属性来更改大小,但我发现仅使用上述方法我取得了更大的成功,而不仅仅是改变大小只是让设计师拍了我的手并禁止我提议的更改。