sql server unique index 开启 ignore_dup_key 去除重复数据

1源表

SET NOCOUNT ON
 GO
IF OBJECT_ID('A01_Infoset_Modify_R') IS NOT NULL
    DROP TABLE A01_Infoset_Modify_R
GO
CREATE TABLE A01_Infoset_Modify_R
(
	A00                 UNIQUEIDENTIFIER,
	InputTemplateID     UNIQUEIDENTIFIER,
	NodeID              UNIQUEIDENTIFIER,
	RID                 UNIQUEIDENTIFIER NOT NULL,
	RightValue          INT DEFAULT 0
)
--添加主键
ALTER TABLE A01_Infoset_Modify_R ADD CONSTRAINT PK_RID PRIMARY KEY CLUSTERED(RID)

INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT 'D2CD0E36-40C4-A306-E306-DD8E2518AD18',
       '14E82E1B-FF1B-4B7E-8291-2194802A28FA',
       '95CD2F58-8BDF-4E92-BB3B-62C1D29B8D0C',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '83CC9F21-4C5B-EBF6-1C3D-23848DBB0638',
       'F3E48A7D-D182-4574-9DE8-85F20C4C347B',
       '5D3EC30D-E997-4DAD-B32E-13D5756B2380',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '7AEDC9A7-482F-BFFE-009C-0C9A61B8765E',
       'BD2E0298-311B-4A12-B91B-39FEE3814AC2',
       'A336BF06-8E24-4400-9CDC-1C97EF3738B7',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT 'D2CD0E36-40C4-A306-E306-DD8E2518AD18',
       '14E82E1B-FF1B-4B7E-8291-2194802A28FA',
       '95CD2F58-8BDF-4E92-BB3B-62C1D29B8D0C',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '83CC9F21-4C5B-EBF6-1C3D-23848DBB0638',
       'F3E48A7D-D182-4574-9DE8-85F20C4C347B',
       '5D3EC30D-E997-4DAD-B32E-13D5756B2380',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '7AEDC9A7-482F-BFFE-009C-0C9A61B8765E',
       'BD2E0298-311B-4A12-B91B-39FEE3814AC2',
       'A336BF06-8E24-4400-9CDC-1C97EF3738B7',
       NEWID(),
       '2'
GO

INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT 'D2CD0E36-40C4-A306-E306-DD8E2518AD18',
       '14E82E1B-FF1B-4B7E-8291-2194802A28FA',
       '95CD2F58-8BDF-4E92-BB3B-62C1D29B8D0C',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '83CC9F21-4C5B-EBF6-1C3D-23848DBB0638',
       'F3E48A7D-D182-4574-9DE8-85F20C4C347B',
       '5D3EC30D-E997-4DAD-B32E-13D5756B2380',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '7AEDC9A7-482F-BFFE-009C-0C9A61B8765E',
       'BD2E0298-311B-4A12-B91B-39FEE3814AC2',
       'A336BF06-8E24-4400-9CDC-1C97EF3738B7',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT 'D2CD0E36-40C4-A306-E306-DD8E2518AD18',
       '14E82E1B-FF1B-4B7E-8291-2194802A28FA',
       '95CD2F58-8BDF-4E92-BB3B-62C1D29B8D0C',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '83CC9F21-4C5B-EBF6-1C3D-23848DBB0638',
       'F3E48A7D-D182-4574-9DE8-85F20C4C347B',
       '5D3EC30D-E997-4DAD-B32E-13D5756B2380',
       NEWID(),
       '2'
GO
INSERT INTO A01_Infoset_Modify_R
  (
    A00,
    InputTemplateID,
    NodeID,
    RID,
    RightValue
  )
SELECT '7AEDC9A7-482F-BFFE-009C-0C9A61B8765E',
       'BD2E0298-311B-4A12-B91B-39FEE3814AC2',
       'A336BF06-8E24-4400-9CDC-1C97EF3738B7',
       NEWID(),
       '2'
GO 


2临时表


if exists (select * from tempdb..sysobjects where id = object_id(N'tempdb..#A01_Infoset_Modify_R2') and type='U')
    DROP TABLE #A01_Infoset_Modify_R2
GO
CREATE TABLE #A01_Infoset_Modify_R2
(
	A00                 UNIQUEIDENTIFIER,
	InputTemplateID     UNIQUEIDENTIFIER,
	NodeID              UNIQUEIDENTIFIER,
	RID                 UNIQUEIDENTIFIER NOT NULL,
	RightValue          INT DEFAULT 0
)
ALTER TABLE #A01_Infoset_Modify_R2 ADD CONSTRAINT PK_#A01_Infoset_Modify_R2_RID 
PRIMARY KEY CLUSTERED(RID)
GO
--创建唯一索引并 ignore_dup_key=on
CREATE UNIQUE INDEX UIX_#A01_Infoset_Modify_R2_A00_NODE_INPUTTEMPLATEID 
ON #A01_Infoset_Modify_R2(NODEID, A00, INPUTTEMPLATEID)
WITH (IGNORE_DUP_KEY = ON)
GO
INSERT INTO #A01_Infoset_Modify_R2

SELECT *
FROM   A01_Infoset_Modify_R
GO


SELECT *
FROM   #A01_Infoset_Modify_R2



3思考

  1.                Truncate 源表
  2. go
  3. insert  into 源表 select * from 临时表
  4. drop 临时表
如果是分区表,可以通过分区切换后,再drop 临时表来实现
       

### 关于 MySQL 中 ER_DUP_ENTRY 错误的理解 在 MySQL 数据库操作过程中,`ER_DUP_ENTRY` 是一种常见的错误提示。该错误表明尝试向数据库表中插入一条记录时,违反了某个字段的唯一性约束条件。具体来说,当插入或更新某条记录时,如果目标字段已经存在相同的值,则会触发此错误。 #### 唯一性约束的作用 唯一性约束用于确保特定列中的所有值都是唯一的,不允许重复。这种机制对于维护数据完整性至关重要。例如,在用户注册系统中,用户名字段通常会被设置为唯一键(unique key),以防止多个用户拥有相同的名字[^1]。 #### 错误的具体表现形式 当发生 `ER_DUP_ENTRY` 错误时,MySQL 返回的信息类似于以下内容: ``` Duplicate entry 'admin' for key 'user_name_unique' ``` 这表示试图插入名为 `'admin'` 的记录到具有唯一索引 `'user_name_unique'` 的字段上,但由于该字段已包含同样的值而失败。 #### 解决方案分析 针对此类问题有多种处理方式: 1. **检查并修改输入数据** 验证即将写入的数据是否存在冲突情况。可以通过查询语句确认是否有重复项: ```sql SELECT * FROM your_table WHERE user_name = 'admin'; ``` 如果发现确实存在同名记录,则需调整新纪录的内容再提交[^3]。 2. **忽略重复插入的操作** 使用 `INSERT IGNORE INTO` 或者 `ON DUPLICATE KEY UPDATE` 来替代普通的 `INSERT INTO` 语法可以有效规避因重复而导致的异常终止行为。 - 对于前者,它会在检测到重复键值时不执行任何动作; ```sql INSERT IGNORE INTO users (id, name) VALUES (1, 'John Doe'); ``` - 后者的功能更强大一些,允许指定如何应对已有记录的情况: ```sql INSERT INTO users (id, name) VALUES (1, 'Jane Smith') ON DUPLICATE KEY UPDATE name=VALUES(name); ``` 3. **重新设计业务逻辑** 若频繁遭遇这类情形可能暗示当前架构存在问题,比如是否真的有必要强制实施严格意义上的单一化?或者考虑引入版本号、时间戳等额外维度来区分看似雷同但实际上不同的实体实例[^3]。 4. **删除冗余记录** 当某些历史遗留下来的多余副本造成干扰时,清理这些无用信息也是一种可行的办法。不过务必谨慎行事以免误删重要资料。 ```python def handle_duplicate_entry(error_message): """ 处理 Mysql Duplicate Entry 错误 参数: error_message(str): mysql 抛出的错误消息 返回: str: 提供解决问题建议的消息字符串 """ if "Duplicate entry" in error_message and "for key" in error_message: parts = error_message.split("'") duplicated_value = parts[1] field_with_constraint = parts[3] suggestion = f"The value '{duplicated_value}' already exists in the column '{field_with_constraint}'. " # 可能的解决方案之一:给出替换选项 alternative_suggestion = ( "Consider using a different value or update existing record instead." ) return suggestion + alternative_suggestion else: return "Error message does not match expected format." example_error = "Duplicate entry 'admin' for key 'user_name_unique'" print(handle_duplicate_entry(example_error)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值