我有一个包含5列的表格。我在这个表上为2列添加了一个唯一索引。但是,只要有重复项,查询就会因错误而停止。
所以,在MySQL中我使用了
insert IGNORE
into TABLENAME1 (COLUMNS)
SELECT COLUMNS from TABLENAME2
我能够克服重复错误并插入其他行。
你能帮我在SQL Server中实现同样的目标吗?换句话说,对于重复的行跳过和插入其他行,mysql的IGNORE会等同于什么?
答案 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命令可以解决您的问题 侨