将数据从多个源加载到目标

时间:2013-03-19 10:25:45

标签: sql-server tsql ssis

我有一个桌面应用程序,通过该应用程序输入数据并在MS Access DB中捕获数据。该应用程序正由多个用户(在不同位置)使用。我们的想法是将为该特定日期输入的数据下载到Excel工作表中,并将其加载到集中式服务器中,该服务器是MSSQL服务器实例。 即数据(以excel表格形式)将来自多个位置并保存到服务器中的共享文件夹中,需要将其加载到SQL Server中。 MSSQL服务器表中有一个IDENTITY的ID列,它是主键列,表中没有包含唯一值的其他列。虽然数据来自多个来源,但我们需要维护单个自动更新系列(IDENTITY)。

假设,如果有2个来源, Source1:当天输入了100条记录。 Source2:当天输入了200条记录。

当它们加载到目标(SQL Server)时,表应该有300条记录,ID列值从1到300。

此外,第二天,当数据来自源时,Destination必须从301 ID列加载数据。

问题是,可能有一些请求要更改Source上的数据,该数据已经加载到中央服务器中。因此,如何更新中央服务器中该行的数据,因为ID列值在源和目标中不相同。如前所述,ID是表中唯一的唯一值列。

请提出一些想法,或者我采取不同的方法来完成这项任务。

提前致谢! 克里希纳

1 个答案:

答案 0 :(得分:1)

好的,首先我建议使用.NET并通过文件流阅读器进行操作,将其转储到DataSet中断开的ADO.NET层,并使用来自不同源的多个DataTable。但是......你提到SSIS所以我会走那条路。

  1. 在Business Intelligence Development Studio(BIDS)中创建一个SSIS项目。

  2. 如果你知道一个事实,你只是在做一堆Excel文件的导入,我只会在一个'数据流任务'中创建许多'数据流任务'或许多源到目标任务。

    一个。我个人会在数据库中为excel文件的每个位置创建表,并将其列映射。我稍后会解释原因。

    湾在数据流任务中,选择“Excel Source”作为源文件。双击Excel Source

    ,放入“新连接”的适当位置

    ℃。选择ADO Net Destination,将蓝色线从Excel Source拖到此端点。

    d。将您的目标映射为您从SQL映射到的表。

    即根据需要对每个Excel目标重复

  3. 设置SSIS任务以从SQL Server到SQL Management Studio自动执行。请记住,您要连接到集成实例,而不是数据库实例。

  4. 好的,现在你有一堆桌子而不是一个大桌子?我之所以这样做是因为这些应该是切入点以及确定欺骗和导入时间的逻辑我将留给另一张桌子。

  5. 我会为逻辑组合和稍后的审核设置另外两个表。

    一个。创建一个像'Imports'或类似的表,让列相同,除了再添加三列:'ExcelFileLocation','DateImported'。创建一个'identity'列作为第一列,并使其默认为(1,1),为其分配主键。

    湾创建第二个表,如'ImportDupes'或类似的,重复上面的列的过程。

    ℃。在第一个表上创建唯一约束,使值或值集合成为导入唯一值。

    ℃。在SQL中编写一个“过程”,从MANY表中插入与excel文件匹配的插入到ONE'Imports'的位置。在许多插入中执行类似于以下的过程:

    Begin try
       Insert into Imports (datacol1, datacol2, ExcelFileLocation, DateImported) values
       Select datacol1, datacol2, (location of file), getdate()
       From TableExcel1
    End try
    
    -- if logic breaks unique constraint put it into second table
    Begin Catch
       Insert into ImportDupes (datacol1, datacol2, ExcelFileLocation, DateImported)  values
       Select datacol1, datacol2, (location of file), getdate()
       From TableExcel1
    End Catch
    
    -- repeat above for EACH excel table
    
    -- clean up the individual staging tables for the next import cycle for EACH excel table
    truncate TableExcel1
    

    d。自动执行该程序

  6. 您现在有两个表,一个用于成功导入,另一个用于重复。

  7. 我做的事情的原因有两个:

    1. 您需要了解更多详细信息,而不仅仅是详细信息,例如来自它的来源,来自哪个来源,是否重复,如果您为数百万行执行此操作,则可以将其编入索引容易吗?

    2. 此模型更易于拆分和自动化。设置可能需要做更多工作,但如果一个部分断开,您可以通过关闭部分中的代码来查看位置并轻松停止一个位置的导入。