SSIS - 将Excel与数据库进行比较

问题描述 投票:1回答:2

我有一个SQL Server 2008 R2数据库,其中有几个表。我将以excel文件格式每天或每周为这些表格获取新数据和数据更新。我正在使用SSIS将excel文件加载到临时表,然后将此临时表记录与主表进行比较以查找更改(因为我需要在更新更改之前进行一些审核)

在SSIS中有什么方法可以直接将excel文件记录与Master表进行比较?即不将它们存储到临时表中

sql-server excel ssis sql-server-2008-r2 ssis-2008
2个回答
1
投票

Using T-SQL

您可以在查询中使用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(),你可以在我提供的链接中找到更多有关这些方法的信息


Using SSIS

使用合并加入

在SSIS中,您可以创建使用Merge Join来执行LEFT JOININNER JOIN操作。

有关更多信息,请参阅我在How Intersect and Except result in SSIS的回答

使用查找转换

或者您可以使用Lookup转换来执行连接(合并连接在JOIN上具有更好的性能),只需参考以下链接:


0
投票

您可能需要考虑执行UPSERT(更新现有/插入新)。插入匹配项,并将不匹配项重定向到其他位置。

http://rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html

© www.soinside.com 2019 - 2024. All rights reserved.