Excel源作为查找转换连接

dem*_*mas 6 sql-server ssis

我需要有Lookup Transformation Task,其中Connection将是Excel Source.但SSIS允许仅将OLEDB连接设置为连接.

是否有可能使用Excel文件作为查找转换的连接?

bil*_*nkc 10

合并排序是一种选择,但如果您确实希望使用Excel作为SSIS查找任务的源,则可以执行此操作.

正如您已正确识别的那样,您无法在Lookup任务中使用Excel Connection Manager,它只接受OLE DB连接管理器.然后,诀窍是使用带有Excel电子表格的OLE DB连接管理器.

对于这个例子,我有一个带有州代码及其全名的电子表格,我的源数据只有缩写.本演练将针对Excel连接查找任务以检索这些值.

记住这些警告:查找区分大小写,无论源数据库(或本例中的文件)是否区分大小写.Excel字符串总是被解释为unicode/nvarchar.

来源数据

给出一个位于C:\ tmp\LookupReference.xlsx的简单文件,如下所示 Excel中的简单键值对

连接管理器

我们必须首先建立一个OLE DB连接管理器.而不是默认的"本机OLE DB\SQL Server本机客户端10.0"更改为"本机OLE DB\Microsoft Office 12.0访问数据库引擎OLE DB提供程序".在服务器或文件名中,找到源文件.此时单击"测试连接"将导致错误.

OLE DB连接管理器连接选项卡

这就是"神奇".单击"全部"选项卡并滚动到顶部.在扩展属性中,添加指示的字符串"Excel 12.0; HDR = YES; IMEX = 1;" 这告诉提供者我们将使用带有标题行的Excel 12.0(.xlsx格式),IMEX 1告诉驱动程序将存在混合数据.

OLE DB连接管理器所有选项卡

你的包现在看起来像这样.具有扩展属性的连接管理器,并假定存在预先存在的数据流

控制流

数据流

为了简化问题,我有一个脚本源,它使用状态代码MO,KS和NE生成3行数据,并将它们发送到管道.您的来源显然会有所不同,但概念将保持不变.注释中提供的示例代码.

在查找转换中,您需要针对电子表格编写查询.它类似于普通的数据库查询,除非你的表Sheet1$有一个命名范围,你的表就是这样.MyRange注意在引用工作表时需要$.使用上面的示例电子表格,我的查询将是

SELECT
    S.StateCode
,   S.StateName
FROM 
    `Sheet1$` S
Run Code Online (Sandbox Code Playgroud)

我将我的脚本任务列StateCode映射到引用查询的StateCode列,并检查StateName字段,因为我想将它添加到我的数据流.

数据流

我在查找任务之后放置了一个数据查看器来验证我的查找是否有效

数据查看器

一切正常,我们都很开心.

旧Excel

如果您使用的是.xls文件,则需要进行以下更改. - 在您的连接管理器中,而不是Office 12提供程序,选择"本机OLE DB\Microsoft Jet 4.0 OLE DB提供程序" - 扩展属性变为"EXCEL 8.0; HDR =是; IMEX = 1;"

轻微编辑

在SSIS查找转换使用Excel进行博客.你也可以使用一个缓存的连接管理器来使用任何来源的SSIS查找2008+