我有一个SQL Server 2008 R2数据库,其中有几个表。我将以excel文件格式每天或每周为这些表格获取新数据和数据更新。我正在使用SSIS将excel文件加载到临时表,然后将此临时表记录与主表进行比较以查找更改(因为我需要在更新更改之前进行一些审核)
在SSIS中有什么方法可以直接将excel文件记录与Master表进行比较?即不将它们存储到临时表中
您可以在查询中使用OPENROWSET()
函数从excel读取数据,并且可以将其与SQL表连接,而无需登台表。
查询示例
SELECT * FROM AmenityData As a
INNER JOIN TypesToGroups As b
ON a.ClassCode = b.FacilityTypeID
INNER JOIN Groups As c
ON b.GroupID = c.GroupID
INNER JOIN OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\postaldistricts.xls;HDR=YES', 'SELECT * FROM [Sheet1$]') As d
ON d.[PostalDistricts] = a.[PostalDistrict]
您可以参考以下链接获取更多信息:
注意:还有其他方法,如OPENDATASOURCE()
或OPENQUERY()
或创建链接服务器,但我尝试的是OPENROWSET()
,你可以在我提供的链接中找到更多有关这些方法的信息
在SSIS中,您可以创建使用Merge Join
来执行LEFT JOIN
和INNER JOIN
操作。
有关更多信息,请参阅我在How Intersect and Except result in SSIS的回答
或者您可以使用Lookup转换来执行连接(合并连接在JOIN上具有更好的性能),只需参考以下链接:
您可能需要考虑执行UPSERT(更新现有/插入新)。插入匹配项,并将不匹配项重定向到其他位置。
http://rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html