【问题标题】:Remove duplicates from a SQL server rows using DISTINCT使用 DISTINCT 从 SQL 服务器行中删除重复项
【发布时间】:2016-08-23 08:56:01
【问题描述】:

使用 distinct 方法将文件导入数据库时​​,我需要删除 SQL Server 重复行。

HallGroup 是我在数据库中的表。我正在使用这个 Sql过程:

SELECT  DISTINCT * INTO tempdb.dbo.tmpTable
FROM HallGroup
DELETE FROM HallGroup
INSERT INTO HallGroup SELECT * FROM tempdb.dbo.tmpTable
DROP TABLE tempdb.dbo.tmpTable

使用此过程可以正常工作,删除重复的行,但问题是当我尝试再次将数据导入 SQL 服务器时,行仍然重复。我错过了什么,所以有什么提示吗?

使用 distinct 方法将文件导入数据库时​​如何正确删除 SQL server 重复行?

【问题讨论】:

  • 所以您看到表中已有数据重复?您需要在导入时链接到该表,以确保您没有重复数据
  • 是的。如何在导入时链接我的表?
  • 我会考虑有一个临时表来加载数据(每次都截断它)。然后用连接做一个简单的插入
  • 我试过截断但效果是一样的。我是 SQL 新手,不知道该怎么做。

标签: sql-server duplicates distinct


【解决方案1】:

我只是在离开一段时间后重新回到 SQL 中,但我不会以你正在尝试的方式解决你的问题(不是我完全理解你为什么这样做),因为我相信(甚至如果它工作正常)随着时间的推移,随着表格大小的增加,您每次执行此操作的过程将花费更长的时间。

如果您在缺少密钥的情况下插入新数据(您表明您已经在使用存储过程),效率会高得多。如果您没有要使用的密钥(最近发生在我身上),请制作一个。我刚刚解决了与您类似的问题,而我正在从外部源将数据导入表中,并希望消除重复的可能性。就我而言,我将外部源数据文件的名称(与要导入的数据集不同)与要导入的数据相关联,并使用它来确保我不会重新导入已导入的数据。我使用 dtsx 将外部数据加载到表中,然后运行存储过程以将该数据与现有表合并。这给了我额外的优势,即对每条记录的来源进行审计跟踪。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多