INSERT 语句如何判断新表中是否存在此数据,如果重复就不插入,不重复的插入

liangjingji 2012-09-28 09:20:44
从[MYHR].[dbo].[hv_kqsk]表
__sno __user __time Zgbh Zgxm Bmbh Bmmx Sksj Sbbh
5 1 2012.09.27 15:25 000006 陈海英 0111 装配课 2012.09.09 09:09 0
6 1 2012.09.27 15:19 000006 陈海英 0111 装配课 2012.10.10 10:10 0
7 1 2012.09.27 15:19 000007 吴小红 0111 装配课 2011.11.11 11:11 0
8 1 2012.09.28 08:58 000006 陈海英 0111 装配课 2012.12.12 12:12 0
INSERT 到 [HSHR].[dbo].[hv_kqsk] 已经有三条数据如下
__sno __user __time Zgbh Zgxm Bmbh Bmmx Sksj Sbbh
1 1 2012.09.27 15:25 000006 陈海英 0111 装配课 2012.09.09 09:09 0
2 1 2012.09.27 15:19 000006 陈海英 0111 装配课 2012.10.10 10:10 0
3 1 2012.09.27 15:19 000007 吴小红 0111 装配课 2011.11.11 11:11 0
现在我想用一个INSERT 把MYHR这个数据库的表数据插入到HSHR这个数据库中来.sksj和zgbh重复的就不要插入,没有重复的就插入.__sno是自增长的列.
求高手解答一下.
...全文
8654 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangjingji 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

我只是没把列名和主键写清楚而已。exists只返回true/false,所以无论你里面是select * /select 1/select 10000都是一样的,但是select *还要计算表中的每个列是否都有,而select1就是是否存在,少检查了一些,性能会稍微好一点。至于select 100000,那完全就是标新立异了。
[/Quote]好的.谢谢大哥了.你这么一说我就明白了.
發糞塗牆 2012-09-28
  • 打赏
  • 举报
回复
我只是没把列名和主键写清楚而已。exists只返回true/false,所以无论你里面是select * /select 1/select 10000都是一样的,但是select *还要计算表中的每个列是否都有,而select1就是是否存在,少检查了一些,性能会稍微好一点。至于select 100000,那完全就是标新立异了。
liangjingji 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

我的和2楼的有什么区别,你自己没看懂而已,77只是把语句写的更详细.....算了,我的你都看不懂,merge会看死你的。
[/Quote]有可能就是一点点的区别.谢谢你了,大哥,能解释下这个SELECT 1是什么意思么? 跟
INSERT INTO [HSHR].[dbo].[hv_kqsk] (zgbh,sksj,sbbh,skbz,sim,msec)
SELECT zgbh,sksj,sbbh,skbz,sim,msec FROM [MYHR].[dbo].[hv_kqsk]
WHERE NOT EXISTS
(SELECT zgbh,sksj,sbbh,skbz,sim,msec FROM [HSHR].[dbo].[hv_kqsk] WHERE sksj=[MYHR].[dbo].[hv_kqsk].sksj AND zgbh=[MYHR].[dbo].[hv_kqsk].zgbh)这个的区别在哪?
發糞塗牆 2012-09-28
  • 打赏
  • 举报
回复
我的和2楼的有什么区别,你自己没看懂而已,77只是把语句写的更详细.....算了,我的你都看不懂,merge会看死你的。
liangjingji 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

如果是2008的话可以用MERGE语句。
[/Quote]3楼帮我解决了.我的是2008,那你说说你的方法是什么? 我再试试哪个方法计算速度快.谢谢
KevinLiu 2012-09-28
  • 打赏
  • 举报
回复
如果是2008的话可以用MERGE语句。
liangjingji 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

INSERT TB(除SNO 的所有列 ) SELECT 除SNO 的所有列 FROM TA A WHERE NOT EXISTS(SELECT 1 FROM TB WHERE sksj=A.sksj AND zgbh=A.zgbh)
[/Quote] 大哥,你很牛,你的是对的.我想知道SELECT 1 这个是什么意思?
liangjingji 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

思路就是:
insert 目标表
select *
from 表(可能也是目标表或者其他表) a
where not exists (select 1 from 目标表 b where a.主键=b.主键)
[/Quote]你这个不行.第四条记录进去不了.
-Tracy-McGrady- 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

思路就是:
insert 目标表
select *
from 表(可能也是目标表或者其他表) a
where not exists (select 1 from 目标表 b where a.主键=b.主键)
[/Quote]
+1
SQL77 2012-09-28
  • 打赏
  • 举报
回复
INSERT TB(除SNO 的所有列 ) SELECT 除SNO 的所有列 FROM TA A WHERE NOT EXISTS(SELECT 1 FROM TB WHERE sksj=A.sksj AND zgbh=A.zgbh)
發糞塗牆 2012-09-28
  • 打赏
  • 举报
回复
思路就是:
insert 目标表
select *
from 表(可能也是目标表或者其他表) a
where not exists (select 1 from 目标表 b where a.主键=b.主键)

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧