SqlServer/Oracle 通过一个sql判断新增/修改
if (Config.DbInfo.DbType.Equals(DBType.SQLServer))
{
sql = " IF EXISTS (SELECT 1 FROM wifi.imsi_model_status WHERE device_id = @device_id and wireless='" + row[].GetString() + "') UPDATE wifi.imsi_model_status SET model_status = @model_status,version=@version,serialnumber=@serialnumber, Log_Time=" + SysConst.time_sqlserver + " WHERE device_id = @device_id and wireless='" + row[].GetString() + "' ELSE INSERT INTO wifi.imsi_model_status(Log_Time, device_id, wireless,model_status,version,serialnumber) VALUES(" + SysConst.time_sqlserver + ", @device_id,'" + row[].GetString() + "', @model_status,@version,@serialnumber)";
cmdParms = new IDataParameter[];
cmdParms[] = new SqlParameter("@device_id", deviceId);
cmdParms[] = new SqlParameter("@model_status", row[].GetString());
cmdParms[] = new SqlParameter("@version", ver);
cmdParms[] = new SqlParameter("@serialnumber", ser);
sqlDic.Add(sql, cmdParms);
}
else if (Config.DbInfo.DbType.Equals(DBType.Oracle))
{
sql = "MERGE INTO wifi.imsi_model_status a USING (select count(*) co from wifi.imsi_model_status WHERE device_id = :device_id and wireless='" + row[].GetString() + "') b ON (b.co<>0) WHEN MATCHED THEN UPDATE SET Log_Time=" + SysConst.time_sql + ",model_status = :model_status,version=:version,serialnumber=:serialnumber WHERE device_id = :device_id and wireless='" + row[].GetString() + "' WHEN NOT MATCHED THEN INSERT (Log_Time, device_id,wireless, model_status,version,serialnumber) VALUES(" + SysConst.time_sql + ", :device_id, '" + row[].GetString() + "',:model_status,:version,:serialnumber)";
cmdParms = new IDataParameter[];
cmdParms[] = new OracleParameter(":device_id", deviceId);
cmdParms[] = new OracleParameter(":model_status", row[].GetString());
cmdParms[] = new OracleParameter(":version", ver);
cmdParms[] = new OracleParameter(":serialnumber", ser);
sqlDic.Add(sql, cmdParms);
}
代码很简单:
1.sqlserver就是使用的exists关键字判断
2.oracle这边就是使用的merge关键字判断
sqlserver核心代码:
if exists (select 1 from Teacher where id='')
update Teacher set name='lisi',addr='重庆' where Id=''
else
insert into Teacher(id,name,addr) values(1,'lisi','重庆')
Oracle核心代码:
MERGE INTO Teacher USING (select count(1) co from Teacher WHERE id='') on(co<>0)
WHEN MATCHED THEN
update set name='lisi',addr='重庆' where Id=''
WHEN NOT MATCHED THEN
insert (id,name,addr) values(1,'lisi','重庆')
SqlServer/Oracle 通过一个sql判断新增/修改的更多相关文章
- [mysql]SQL语句-新增/修改  创建时间 更新时间
		
SQL关键词 要注意大小写 已建表,之前没有创建时间列, 现新增1列创建时间,并设置默认值为当前时间 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER T ...
 - SQL语句大全(mysql,sqlserver,oracle)
		
SQL语句大全 --语句功能--数据操作SELECT --从数据库表中检索数据行和列-selectINSERT --向数据库表添加新数据行-insertDELETE --从数据库表中删除数据行-del ...
 - SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
		
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
 - Oracle忘记用户名和密码以及管理员用户新增修改删除用户
		
Oracle忘记密码: 1.以管理员身份登录,打开dos窗口,输入 sqlplus / as sysdba 回车 2.查看当前用户和状态 select username, account_status ...
 - Oracle数据库该如何着手优化一个SQL
		
这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...
 - 使用oracle 的 PL/Sql 定时执行一个存储过程
		
CSDN日报20170322--<关于软件研发的一些体会总结> 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...
 - ORACLE里怎么能判断一个日期类型的字段是否为空,解决方法:is null
		
ORACLE里怎么能判断一个日期类型的字段是否为空,解决方法:is null,解决方法:判断什么null都可以用is null.
 - db2 中 SQL判断物理表是否存在、修改表名
		
1.db2 中 SQL判断物理表是否存在 SELECT * FROM SYSIBM.SYSTABLES WHERE TID <> 0 AND Name = 'TABLE_NAME' AND ...
 - Oracle数据库常用Sql语句大全
		
一,数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ...
 
随机推荐
- 关于Linux连接工具mobaxterm显示中文乱码问题
			
本人用的是MobaXterm Personal 9.1版本.近期发现连接上服务器,查看日志时,发现中文乱码,无法正常显示.甚是苦恼.百度搜索该工具显示乱码问题,无一人解决.提倡更换连接工具.无意间发现 ...
 - jenkins 配置主从机制(master-slaver)
			
1. 中文:系统管理——节点管理——新建节点(左上侧) 英文:Manage Jenkins——Manage Node——新建节点(左上侧) 2. 中文配图 英文配图: 3. 远程工作目录 以mac为例 ...
 - 用vs2013开启一个C拖控件的项目
			
visual studio作为一款集成开发环境备受青睐,笔者尤其喜爱它的拖控件功能,程序员应该追求业务逻辑和实际功能的优化,而不是把时间消耗在编写窗体和按钮上 笔者曾翻阅中关村图书大厦,西单图书大厦, ...
 - 洛谷P1080 国王游戏【大数】【贪心】
			
题目:https://www.luogu.org/problemnew/show/P1080 题意: 一个国王和n个大臣,每个人左右手上都有一个数值. 现在将国王排在队首,将大臣进行排序.每个大臣的值 ...
 - socket、tcp、udp、http 的认识
			
一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输 ...
 - XGBoost的优点
			
1. Gradient boosting(GB) Gradient boosting的思想是迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,后面的模型Fm+1(x)基于前面学习模型的Fm( ...
 - OnUpdateError
			
DataSetProvider1.OnUpdateError void __fastcall TFrmItem::Query1UpdateError(TDataSet *ASender, EFDExc ...
 - [转载]作为理工科学生,我们为什么要练就好的文笔?我们需要发blog来记录学习历程?
			
文/JoeyChen 工程师该怎样才能突破自己的能力瓶颈?写 blog! 工程师该怎样精进自己在职涯上所需要的能力?写 blog! 工程师该怎样才能保持学习与成长的动能?写 blog! 工程师该怎样才 ...
 - codeforces#1150D. Three Religions(dp+序列自动机)
			
题目链接: https://codeforces.com/contest/1150/problem/D 题意: 给出长度为$n$的字符串,和$q$次询问 每次询问是,给$x$宗教增加一个字符$key$ ...
 - CodeForces 519D A and B and Interesting Substrings ——(奥义字符串)
			
题意:给出26个字母每个字母的价值,问字符串中有多少个满足以下条件的子串: 1.子串的第一个和最后一个相同 2.子串除了头和尾的其他字符的价值加起来和尾0 这题普通方法应该是O(n^2),但是在1e5 ...