SQL怎样插入重复项,不重复的跳过!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL怎样插入重复项,不重复的跳过!相关的知识,希望对你有一定的参考价值。

INSERT into YTH.[dbo].[ACTI_COM]
([FCASE_ID]
,[FCASE_COMM]
,[FLASTUSER]
,[FLASTTIME])
select [FCASE_ID]
,[FCASE_COMM]
,[FLASTUSER]
,[FLASTTIME]
from PC.[dbo].[ACTI_COM]
执行结果如下:
消息 547,级别 16,状态 0,第 3 行
INSERT 语句与 FOREIGN KEY 约束"FK__ACTI_COM__FCASE___18D6A699"冲突。该冲突发生于数据库"YTH",表"dbo.CASE_", column 'FCASE_ID'。

因 PC.[dbo].[ACTI_COM]表里的[FCASE_ID]与 PC.[dbo].[CASE]表里的主键[FCASE_ID]多出好几十条数据!所以想插入到YTH.[dbo].[ACTI_COM]的表里的数据与YTH.[dbo].[CASE]表的主键约束起冲突了!

所以有没有办法在YTH.[dbo].[ACTI_COM]表里只插入与 PC.[dbo].[CASE]表里的[FCASE_ID]列名相同的数据!

也就是说当插入数据到 YTH.[dbo].[ACTI_COM]表的时候 IF [FCASE_ID] = PC.[dbo].[CASE]表里的[FCASE_ID] 或等于 YTH.[dbo].[CASE]表里的[FCASE_ID] 才执行插入!
或者有没有办法 直接删除 当PC.[dbo].[ACTI_COM] 表里的[FCASE_ID] 不等于PC.[dbo].[CASE]表里的[FCASE_ID] 的时候就删除!直接删除 不相同的[FCASE_ID]

参考技术A 如果你确实要执行批量的插入语句,同时又必须判断插入的每条记录不能重复,那么就无法只用一个sql语句搞定的,你必须写一个循环来判断插入的记录是否重复 参考技术B insert into 表A select * from OPENDATASOURCE(
'SQLOLEDB','Data Source=192.168.0.1;User ID=sa;Password=sa'
).databasename.dbo.表B where id not in (select id from 表A)本回答被提问者和网友采纳

MySQL 中用于插入的 ROW_NUMBER() 等效项[重复]

【中文标题】MySQL 中用于插入的 ROW_NUMBER() 等效项[重复]【英文标题】:ROW_NUMBER() equivalent in MySQL for inserting [duplicate] 【发布时间】:2012-08-11 10:11:20 【问题描述】:

我正在尝试将在 Microsoft SQL Server 中创建的 SQL 脚本转换为可以在 SQL 过程中使用的脚本,以便使用链接服务器运行,我正在使用的脚本

ROW_NUMBER() OVER(ORDER BY [FIELDS])

要创建不依赖于自动增量的主键,当我尝试将代码另存为过程时出现此错误

ERROR 1064 (42000):您的 SQL 语法有错误:请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 [LINENO] 行的“(ORDER BY [FIELDS])”附近使用/p>

显然错误是说 ROW_NUMBER OVER 不正确,因为我删除了 OVER 位并收到错误说 ROW_NUMBER 未定义

在我搜索的所有地方,除了人们为 SELECT 语句而不是 INSERT 语句询问这个问题外,我什么也没得到创建与 ROW_NUMBER() 在 Microsoft Server 中相同的数据

【问题讨论】:

表示OVER 函数的参数无效。 @ColeJohnson: OVER 无论如何不在 MySQL 中,我通过在 Google 中搜索它进行了检查,并且只获得了指向 MSDN 的链接,即使参数是正确的,它也可能会给出与 ROW_NUMBER 相同的消息或两个函数之间的语法错误......是的,脚本在 Microsoft SQL Server 中工作,因为我在其中运行它,因为它只使用链接服务器,我通过将其从使用中移出来使脚本运行得更好实际在服务器本身中使用的链接服务器 我正在尝试将行号插入表中,我不能使用 INSERT INTO [TABLE] VALUES(@rank+1) 因为每次只会让我得到 1,即不允许主键,我试过@row += 1 【参考方案1】:

不幸的是,在 MySQL 中没有 ROW_NUMBER() 等价物,但您仍然可以通过创建一个简单的变量来模拟它,该变量包含一个值,每行递增。

例子:

SET @rank=0;
SELECT   @rank := @rank+1 AS rank, fruit, amount
FROM     sales
ORDER BY amount DESC;
SQLFiddle Demo

【讨论】:

它没有返回像 1,2,3... 这样的行号。它返回 1,2,9,11... 这不是我想要的

以上是关于SQL怎样插入重复项,不重复的跳过!的主要内容,如果未能解决你的问题,请参考以下文章

如何通知我的 WPF 应用程序我的 SQL 查询在插入数据库时​​跳过了重复的行?

向数据库里插入大量数据,怎么实现不插入重复的记录

sql 2005 语句 身份号码不重复

SQL执行插入时,遇到重复键值时,如何设置才能让新插入的数据覆盖原有旧数据;要用存储过程么?

MySQL 中用于插入的 ROW_NUMBER() 等效项[重复]

Oracle删除重复记录只保留一条数据的几种方法