sql server 如何遍历插入数据

需要将A表的3条数据查询出来插入B表,插入之前需要判断B表是否已经存在该条数据,存在则过滤掉,不存在则插入,需要涉及到判断,遍历等技术点,感谢大家帮忙解答!

img

你要实现的效果,不需要通过遍历就可以实现,使用批量插入即可。

insert into aaa (code, name)
select code, name
from bbb
left join aaa on aaa.code = bbb.code and aaa.name = bbb.name --左联找出AAA表不存在的数据
where b.code is null

insert into 的时候查一下aaa表不在bbb表中的数据就好了

insert into bbb select * from aaa a where a.name not in (select b.name from bbb b) ;

执行前

img


执行增加两条

img


执行后

img

按code和name同时过滤

USE [test]
GO
insert into dbo.test_b 
select code,name from dbo.test_a where not exists (select 1 from dbo.test_b where test_b.code=test_a.code and test_b.name=test_a.name)

只按code过滤

USE [test]
GO

insert into dbo.test_b 
select code,name from dbo.test_a where not exists (select 1 from dbo.test_b where test_b.code=test_a.code)

INSERT INTO B 
SELECT CODE 
      ,NAME 
FROM A 
WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.CODE = B.CODE )

这个用merge into就可以实现吧

代码示例如下 tb1数据插入tb2
insert into tb2
SELECT * from tb1 where code+name not in (SELECT code+name from tb2)

这种情况,只要把表加个唯一约束就OK了,看下面的例子:
IF OBJECT_ID('dbo.testaa') IS NOT NULL
    DROP TABLE dbo.testaa    
IF OBJECT_ID('dbo.testbb') IS NOT NULL 
    DROP TABLE dbo.testbb

CREATE TABLE testaa(code VARCHAR(20),name VARCHAR(20))
CREATE TABLE testbb(code VARCHAR(20),name VARCHAR(20))
INSERT testbb 
SELECT '1.1','我'
UNION ALL SELECT '1.2','你'
UNION ALL SELECT '1.3','他'

INSERT dbo.testaa
SELECT '1.1','我'

ALTER TABLE    testaa ADD CONSTRAINT uiq UNIQUE(code)
WITH (IGNORE_DUP_KEY = ON)

INSERT dbo.testaa
SELECT * FROM dbo.testbb

SELECT * FROM dbo.testaa

pymysql

insert into bbb (code, name)
select 
code,
name 
from aaa a 
where not exists (select 1 from bbb b where b.code=a.code)

可以用union 去重