我正在创建一组 SSIS 2014 包(使用 Visual Studio 2013)从 50 个表中导入数据。由于大多数表都在同一列上进行过滤,并且我将所有列导入到我的暂存区域中,因此我选择了可重用设计,其中我的包名称与表名称匹配,我的 OLE DB 源查询是用表达式定义的 -基于变量(以 开头SELECT * FROM <tablename>...
)和我的 OLE DB 目标表也使用基于表达式的变量(在本例中为 schema.tablename)定义。
源查询和目标表都具有匹配的列名,并且在大多数情况下在数据类型和大小上匹配。
当我为每个表克隆我的包时,我复制/粘贴一个先前创建的包并目视检查映射以确认表达式和数据流映射对于新包名称有效。我看到表达式按计划工作,但我必须手动对目标编辑器中的大多数列进行拖放映射。
这是编辑器的预期行为,因为原始包的设计元数据在新包名称下无效,有没有办法让 Visual Studio 根据列名删除并重新映射数据流中的所有列?
复制和粘贴 SSIS 包可能会导致一些问题。听起来你有简单的包——一个源到目的地的数据流。一般来说,那些没有我遇到过的挂断,但我见过人们对数据类型的定义不一致的情况。电子邮件 - varchar(40)、varchar(80)、varchar(120)、nvarchar(256) 都在同一个数据库中,只是在不同的表中。可能发生的情况是您首先使用 80 大小构建您的包。当您复制/粘贴和修复源表时,当您转到 40 表时,编辑器可能不会注意到数据大小的变化,因为它适合旧的大小。但我也看到了相反的情况——它可能不会增加尺寸。分辨率并不可怕,只需将您的查询更改为
select 1 AS x
,让它设置元数据,然后将您的查询修复回正确的选择。正如 Dave 所建议的,此任务非常适合入门级 Biml 任务。事实上,只要您不介意没有明确的源查询,我的Biml replicate-o-matic几乎就是您所描述的。较早的版本在SO上,我正在链接到它以对冲链接腐烂。
如果你喜欢你的方法,你可以保持你的方法。但是,省去在目的地中单击和拖动的时间,并用六次单击来替换它:右三下,左三下。在您的映射选项卡中,右键单击以显示此上下文相关菜单
左键单击“选择所有映射”
右键单击并左键单击“删除选定的映射”
右键单击然后左键单击“按匹配名称映射项目”
是的,即使您解决了引用,目的地也不会正确地自动映射。您必须创建一个新目标或为您的目标选择一个不同的表,接受/关闭,然后打开并选择您想要的目标,它现在应该会自动解析您的列关联。不过,我以前也遇到过困难。
现在有 50 个表,谁知道将来有多少,您应该检查BIML,它将为每个包生成 XML,因此(假设您正确设置了所有内容)甚至不需要检查创建的包。