【问题标题】:How to avoid future duplicates in sql server如何避免将来在 sql server 中出现重复
【发布时间】:2019-09-24 06:01:42
【问题描述】:

我今天对此做了很多问题,我没有澄清我的问题可能是我的问题,但我现在很想改进 sql
我正在接受培训,当谈到 sql 时我迷路了......但到目前为止我做得很好,我在 asp.net C# 中做了一个程序,用户可以将 excel 文件导入数据库......

我的老板希望我避免以后的记录重复,例如

名称年龄城市 佩德罗 12 里斯本 丽塔 18 伦敦 丽塔 18 伦敦

如何避免最后一行与第二行相同? 有一个查询可以在插入的那一刻立即删除重复项?

【问题讨论】:

  • 提示:Unique 约束。
  • 问题:您还想删除当前可能已经存在的重复项吗?

标签: sql asp.net excel database


【解决方案1】:

在这种情况下,您不会“立即删除”记录。相反,insert 只是失败了。

如果要防止所有列重复,可以使用唯一约束或唯一索引(前者使用后者实现):

alter table t add constraint unq_t_all_cols unique (name, age, city);

更常见的是,表会在列的子集上具有主键和唯一约束/索引。在这种情况下,它可能是name——尽管这通常不如某种形式的实际 id。

【讨论】:

  • 所以我必须在 asp.net 中插入并将该代码放入 sql 中?因为我希望用户将他的 excel 文件上传到数据库,如果他想插入另一条记录
  • 不,您必须更改 sql server 中的表,这就是语句的作用。在该名称之后,年龄和城市必须是唯一的。但该解决方案可能存在问题,因为 ibn Lisbon 与 12 岁的 Pedros 相比更多。
【解决方案2】:

您可以将 EXCEPT 子句添加到您需要的任何字段的插入语句中作为唯一元组。

INSERT INTO tblDestination(Name, Age, City)
(SELECT Name, Age, City FROM tblSource)
EXCEPT SELECT Name, Age, City FROM tblDestination

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多