MSSQL 插入数据时候,如果存在则更新的方法分享

摘要:
下文讲述MSSQL中,插入数据时,如果存在则更新,否则就插入数据的方法分享
实验环境:sql server 2017 
mssql中,我们可以采用 MERGE INTO 关键字实现此功能,
当两者匹配成功,则运行***语句,否则运行其它语句,达到插入数据时的判断操作,
具体操作方法如下所示:

create table [maomao365.com]
(keyId int identity,
info varchar(80)
)
go
insert into [maomao365.com]
(info)values(‘sqlblog‘),
(‘sqlserver‘),(‘maomao365.com‘)

---merge into实现如果存在,则更新
---如果不存在,则删除
MERGE INTO [maomao365.com] a
USING (SELECT 2 AS keyId_B, ‘other‘ AS info_B ) b
ON ( a.keyId = b.keyId_B)

WHEN MATCHED THEN
UPDATE SET a.info= b.info_B --更新

WHEN NOT MATCHED THEN
INSERT (info) VALUES(b.info_B); ---插入

go
select * from [maomao365.com]
go
MERGE INTO [maomao365.com] a
USING (SELECT 20 AS keyId_B, ‘new Info‘ AS info_B ) b
ON ( a.keyId = b.keyId_B)

WHEN MATCHED THEN
UPDATE SET a.info= b.info_B --更新

WHEN NOT MATCHED THEN
INSERT (info) VALUES(b.info_B); ---插入
go

select * from [maomao365.com]
go
truncate table [maomao365.com]
drop table [maomao365.com]

转自:

http://www.maomao365.com/?p=9679

相关阅读:

merge关键字实现增删改

原文地址:https://www.cnblogs.com/lairui1232000/p/11523488.html

时间: 2024-11-08 23:36:44

MSSQL 插入数据时候,如果存在则更新的方法分享的相关文章

mysql插入数据后返回自增ID的方法

mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢? 方法一:是使用last_insert_id mysql> SELECT LAST_INSERT_ID(); 产生的ID 每次连接后保存在服务器中.这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMEN

数据库插入数据返回当前主键ID值方法

环境:SQL Anywhere 9.0.2 创建语句: create table test(    id int primary key identity(1,1),    name varchar(20)) 当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. 使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select

在SQLServer中使用SQL语句插入数据出现乱码或问号的解决方法

错误产生的原因: 出现使用SQL语句插入数据出现乱码或问号是由于数据库属性的排序规则设置不正确. 解决方法: 方法一:手动修改(设置数据库的排序规则) 注意事项:要确定修改的数据库没有被使用,否则会失败! 具体步骤:选中要修改的数据库-->右键-->属性-->弹出数据库属性对话框-->选项-->把排序规则设置成: Chinese_PRC_90_CI_AS-->确定. 方法二:使用代码修改 注意事项:要确定修改的数据库没有被使用,否则会失败!(将数据库连接断开执行这个脚本

[mysql] SQL:当不存在时插入数据;当存在时更新数据

ON DUPLICATE KEY : INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+3; INSERT INTO test2(file,owner,flag) VALUES ('file2','coco.yue',1) ON DUPLICATE KEY UPDATE flag=3;

hive中创建子表并插入数据过程初始化MR报错解决方法

本文继成上一篇通过hive分析nginx日志文章,详情参考下面链接: http://www.cnblogs.com/wcwen1990/p/7066230.html 接着来: 创建业务子表: drop table if exists chavin.nginx_access_log_comm; create table if not exists chavin.nginx_access_log_comm( host STRING, time STRING, request STRING, refe

sqlserver插入数据后自动返回自增编号方法

以下是代码 比如这个表里面的id是主键,并且是自增的 insert into demo() output inserted.id  values('a','b'); 使用output inserted.(自增的编号的字段名) 这样就出来了.

mssql sqlerver 脚本 计算数据表的结余数的方法分享

转自:http://www.maomao365.com/?p=5710 摘要:今天接到一个需求,有一张数据表,记录的是消费明细数据,现在需要做一个累计结余,记录每次的数据结余合计,下文将展示一种sql脚本的编写方式实验环境:sqlserver 2008 R2如下例所示: detail表 记帐流水表 ========== 字段: qt_srMoney (money) 收入 qt_zcMoney (money) 支出 qt_date (datetime) 操作日期 qt_dkfs (nvarchar

SQl server 关于重复插入数据的测试

最近发布的脚本,有那种防止重复插入数据(包括存在时更新,不存在是插入的处理,判断的方向可能与下面的示例相反) 使用类似下面的 SQL declare @id int, @value int if not exists( select * from tb where id = @id ) insert tb values( @id, @value ); --else --  update tb set value = @value where id = @id; 或者是使用这种单句的 declar

java插入数据至mysql数据库报错:check the manual that coresponds to your mysql server version for the right syntax to use near 'condition)values...解决方案

MySQL5.X(本地数据库) 使用java向表中插入数据时,每次数据库更新,pstm.executeUpdate();就会跳到IO报错,提示原因是sql语法有问题,如题可见 当测试插入数据不含condition字段时,插入成功,尝试更名为conDition时,仍报错 解决方案: 更改condition为conDi,原因可能时因为condition为数据库或java关键字不能使用,更名后不再受影响,插入成功. java插入数据至mysql数据库报错:check the manual that c