SQL 多行数据的插入前判断?

CTO 2016-10-12 07:40:40
INSERT INTO TABLE1(COL1, COL2, COL3) VALUES
(col1value1, col2value1, col3value1)
(col1value2, col2value2, col3value2)
(col1value3, col2value3, col3value3)
(col1value4, col2value4, col3value4)
.............

SQL 2012 - 要插入不定行数的数据,想要在插入每行数据前比较col1和col2是否存在然后再插入,如果是单行数据比较简单,可以写成:

IF NOT EXIST (SELECT * FROM TABLE1 WHERE COL1 = 'VALUE1' AND COL2='VALUE2')
BEGIN
INSERT INTO TABLE1 (COL1, COL2, COL3) VALUES('VALUE1', 'VALUE2', 'VALUE3')
END

但是多行的插入判断怎么写呢?
...全文
82 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 版主 2016-10-12
  • 打赏
  • 举报
回复


-- 使用 merge ,values 的部分, 可以直接拿出来,取个别名就可以了
create table test(a int, b int)
go
insert into test values(101,200),(200,300)
go
merge into test using 
(
values
(100,200),
(200,300),
(300,400),
(222,333)
) t(a,b)  -- 这个是别名
on test.a = t.a and test.b = t.b
when not matched then
insert (a,b) values(t.a,t.b);
go
select * from test 
go
drop table test 
go

(2 行受影响)

(3 行受影响)
a           b
----------- -----------
101         200
200         300
100         200
300         400
222         333

(5 行受影响)


34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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