【问题标题】:SQL Server table from an Excel spreadsheet without a unique column using SSIS使用 SSIS 的 Excel 电子表格中没有唯一列的 SQL Server 表
【发布时间】:2021-08-27 15:38:25
【问题描述】:

我正在从导出的 CRM 数据创建一个数据库。到目前为止,每个导出都有一个可用作主键的唯一列或可用于创建复合主键的列组合。

我有一个数据集实际上包含合法的重复行,并且没有列 ID 或标识每一行的唯一方法。

我正在创建的过程是相当自动化的。我有一个 Sharepoint 位置,其中放置了电子表格和 SSIS 包,这些包从这些工作表中提取数据并将它们加载到数据库中。我需要一种方法来为可以复制的行创建一个键,以防止上传超过已经存在的重复行。

我考虑过创建一个计算列,将一个数字连接到一个复合键上,以显示这是该数据的第一次出现,依此类推。因此,如果出现两次,则会上传 Col1_Col2_Col3_1 和 Col1_Col2_Col3_2。因此,如果该工作表没有在 Sharepoint 上及时更改,那么这两个事件将不会被上传。

是否可以计算集合中某行的出现次数,而不仅仅是该行数据的出现次数?我真的迷路了,需要一个坚实的地方来解决这个似乎几乎不可能的问题。我对任何解决方案持开放态度,无论是 SSIS 中的 C# 脚本,还是在服务器端完成,只要我能提出一个随着时间推移可靠的解决方案,我都会实施它。

【问题讨论】:

    标签: sql-server excel ssis sql-server-data-tools


    【解决方案1】:

    您可以将数据按原样(带有重复项)加载到 sql 中的工作表中,然后使用row_number()

    create table HasDuplicates(i int, j int, k int);
    
    -- load in your data, I'll just do some inserts with one duplicate pair:
    insert HasDuplicates(i, j, k) values (1, 2, 3), (1, 2, 3), (2, 3, 4)
    
    -- generate "uniqueified" data. Since the "order by" is irrelevant, I'll just use a constant
    select   i, j, k, instance = row_number() over (partition by i, j, k order by (select 1))
    --into     Deduplicated <- uncomment this to save the result as a new table
    from     HasDuplicates
    

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2018-04-18
      • 2010-10-03
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      相关资源
      最近更新 更多