sql-server - 使用 SSIS 的 Excel 电子表格中没有唯一列的 SQL Server 表
问题描述
我正在从导出的 CRM 数据创建数据库。到目前为止,每个导出都有一个可用作主键的唯一列或可用于创建复合主键的列组合。
我有一个数据集实际上具有合法的重复行并且没有列 ID 或标识每一行的唯一方法。
我正在创建的过程是相当自动化的。我有一个放置电子表格的 Sharepoint 位置和从这些工作表中提取数据并将它们加载到数据库中的 SSIS 包。我需要一种方法来为可以复制的行创建一个键,以防止上传已经存在的重复行。
我想过可能创建一个计算列,将一个数字连接到一个复合键上,以显示这是该数据的第一次出现,依此类推。因此,如果出现两次,则会上传 Col1_Col2_Col3_1 和 Col1_Col2_Col3_2。因此,如果该工作表没有在 Sharepoint 上及时更改,那么这两个事件将不会被上传。
是否可以计算集合中某一行的出现次数,而不仅仅是该行数据的总出现次数?我真的很迷茫,需要一个坚实的地方来解决这个似乎几乎不可能的问题。我对任何解决方案持开放态度,无论是 SSIS 中的 C# 脚本,还是在服务器端完成,只要我能提出一个随着时间推移可靠的解决方案,我都会实施它。
解决方案
您可以将数据按原样(带有重复项)加载到 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
推荐阅读
- r - 如何在 Simmer 环境中编写生成器循环
- exchangewebservices - 调用 EWS GetItem 时出现 ErrorAccessDenied
- javascript - 应用程序初始化代码在 React 应用程序中的作用是什么?
- windows - 有没有办法在 Windows 10 服务的隐藏 gui 上按下按钮?
- google-chrome - 安装 seabios 时出错(意外标记“换行符”附近的语法错误)
- java - Kafka 用于服务间通信。定向通信问题
- c# - Visual Studio - Sabre GetReservationRS 未在 Intellisense 中显示旅行项目
- google-cloud-platform - GCP 引擎 Ubuntu 16.04 崩溃
- android - 屏幕旋转后的 Android Arch 组件 ViewModel 和 LiveData 触发
- c# - 如何获得 ResultCodeExtended OPOS?