我毫不犹豫地发帖,因为我觉得我错过了一些简单的东西,但在阅读了大量的文章后,我需要第二眼,因为我的眼睛已经上釉了。
SSIS 2012解决方案。
目标:将47个MS Access数据库中的数据导入相应的SQL Server数据库。这意味着47个包裹。我想避免使用47组不同的连接管理器,并在项目级别参数化出有意义的内容,以便可以轻松配置常用数据。
我添加了项目级参数来保存SQL Server,SQL用户名,SQL密码和Access数据库的路径。这些将映射到环境以允许轻松更改目标SQL Server以及Access DB的源目录。
我添加了两个项目级OLEDB连接管理器 - 一个用于SQL 2012(NativeClient 11.0),一个用于Access(MSJET 4.0)(它们访问2000 db' s)。它们被设置为使用初始数据库配置,我希望它将被各个包覆盖。
对于每个包,我想指定正在使用的数据库,因此我创建了一个包变量(SQLDatabase和AccessDatabase)
在Connection Manager中,我添加了表达式以包含包变量 - 例如对于SQL连接管理器上的InitialCatalog = @ [User :: SQLDatabase]和Access CM中的ServerName组合项目路径+ @ [User :: AccessDatabase]
工作原理:
什么失败:
当我单击预览或列后,选择一个表后,我收到一个大错误:
" Package1错误:变量' User :: SQLDatabase'在Variables集合中找不到。变量可能不在正确的范围内。"
单击“确定”以显示该错误后,“预览”或“列”窗口将显示,没有其他问题。
但是,在OLE DB源代码编辑器上单击“确定”后,框中会出现一个大的红色X,表示上述错误。
我的困惑:
如果我打开包的变量,变量就坐在那里,作用于Package1。如果我更新它并保存,Connection Manager会相应地更新自身,因此Expression映射似乎没问题。
好像这只是部分工作,并且我不确定该标志在哪里使其余的工作,或者我的配置失败。您是否可以在项目级CM中设置表达式以使用包级变量?如果是这种情况,我就不知道如何正确设置它以避免软件包级别的CM。
任何帮助表示赞赏。如果我在某个地方是个白痴,请温柔。
答案 0 :(得分:3)
如果连接管理器处于项目级别,则无法使用包级别变量来设置其值。如果转到初始目录的表达式构建器,则可以看到只有项目级变量可用。因此,您可以使用项目级别变量来设置它。如果你真的想使用包级别变量,那么你需要为每个包创建一个连接管理器,这将是一个痛苦。