我有一个SQL Server 2008 R2数据库我在其中有几个表。我将以excel文件格式每天或每周为这些表格获取新数据和数据更新。我使用SSIS将excel文件加载到临时表,然后将此临时表记录与主表进行比较以查找更改(因为我需要在更新更改之前进行一些审核)
SSIS中是否有任何方法可以直接将excel文件记录与Master表进行比较?即不将它们存储到临时表
答案 0 :(得分:1)
您可以在查询中使用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上有更好的性能),只需参考以下链接:
答案 1 :(得分:0)
您可能需要考虑进行UPSERT(更新现有/插入新)。将插入匹配项,并将不匹配项重定向到其他位置。
http://rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html