避免重复插入 - SQL Server

时间:2017-01-25 16:54:08

标签: sql-server

我有一个包含5列的表格。我在这个表上为2列添加了一个唯一索引。但是,只要有重复项,查询就会因错误而停止。

所以,在MySQL中我使用了

insert IGNORE 
into TABLENAME1 (COLUMNS) 
SELECT COLUMNS from TABLENAME2  

我能够克服重复错误并插入其他行。

你能帮我在SQL Server中实现同样的目标吗?换句话说,对于重复的行跳过和插入其他行,mysql的IGNORE会等同于什么?

3 个答案:

答案 0 :(得分:1)

我担心没有相应的东西。 相反,您应该在插入期间将连接保留到目标表

Insert INTO TARGET
SELECT * FROM SOurce
LEFT JOIN Target 
On ..
WHERE Target.Key IS NULL

还有其他版本使用子查询或存在...

答案 1 :(得分:0)

您可以删除唯一约束并使用IGNORE_DUP_KEY = ON创建它。由于您无法更改唯一约束...以下步骤中的建议

1.表示现有的唯一约束
2.用以下定义创建

CREATE UNIQUE NONCLUSTERED INDEX [uq] ON [dbo].[t1]
(
    [id] ASC,
    [id1] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = on, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

如果您没有唯一的密钥并仍然插入重复项,那么这是唯一的选择

答案 2 :(得分:-2)

试试这个:

INSERT INTO TABLE1 (f1,f2,f3,f4,f5)
SELECT DISTINCT v1,v2,v3,v4,v5
FROM TABLE2

可能是一个简单的DISTINCT命令可以解决您的问题 侨