1

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

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

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

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

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

请建议一些想法来做到这一点,或者我必须采取不同的方法来完成这项任务。

提前致谢!克里希纳

4

1 回答 1

1

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

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

  2. 如果您知道事实上您只是在导入大量 Excel 文件,我会在一个“数据流任务”中创建许多“数据流任务”或许多“源到目标”任务,由您决定。

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

    湾。在数据流任务中,选择“Excel Source”作为源文件。通过双击 Excel 源将“新连接”的适当位置

    C。选择一个 ADO 网络目标,将蓝线从 Excel 源拖到此端点。

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

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

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

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

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

    一个。创建一个类似“Imports”或类似的表,除了添加另外三个列之外,列相同:“ExcelFileLocation”、“DateImported”。创建一个“身份”列作为第一列,并将其作为默认值 (1,1) 的种子,并为其分配主键。

    湾。创建第二个表,如“ImportDupes”或类似表,对列重复上述过程。

    C。在使导入唯一的一个值或一组值的第一个表上创建唯一约束。

    C。在 SQL 中编写一个“程序”,从与 Excel 文件匹配的 MANY 表中插入一个“导入”位置。在许多插入中执行类似于以下的过程:

    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. 您现在有两张表,一张用于成功导入,一张用于重复。

我这样做的原因有两个:

  1. 很多时候,您需要了解更多细节,而不仅仅是详细信息,例如它来自什么来源,是否重复,如果您对数百万行执行此操作,是否可以轻松对其进行索引?

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

于 2013-03-19T16:39:47.540 回答