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 ...
随机推荐
- 【Java 基础项目 - - Bank项目4】 对象构造/跨package调用
UML设计: 文件组织: (注: 在bank4中,直接调用bank3的内容, 不再重复编写代码即可!) 代码编写Bank.java: package Banking_4; import Banking ...
- 02—mybatis的基本用法01
深入mybatis的配置文件(mybatis-config.xml) MyBatis的配置文档结构 顶层configuration 配置 properties 属性 settings 设置 typ ...
- vue今日总结
''' 复习 ''' """ 1.vue框架的优势 中文API 单一面应用 - 提升移动端app运行速度 数据的双向绑定 - 变量全局通用 数据驱动 - 只用考虑数据,不 ...
- Ubuntu14版桌面突然卡住怎么办
参考:https://blog.csdn.net/hautxuhaihu/article/details/78924926 (1)ctrl+alt+f1...6进入命令行终端.用户名,密码登录. (2 ...
- RecursiveTask和RecursiveAction的使用 以及java 8 并行流和顺序流(转)
什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我 ...
- 创建节点--DOM树
创建节点 快捷键:innerhtml outerhtml innertext outertext ==============创建节点方法有两种:============== <script s ...
- PHP实现省市区关键词搜索邮编
前两天做了一个项目, 其中有一个需求是根据用户输入的关键词查询邮编. 最开始设计的数据库结构是省市区分为三个字段, province, city, area, 但是在写代码实现的过程中发现, 用户只输 ...
- springboot热部署如果不行
如果热部署不行先看一眼 Project——>Build Automatically 看这个有没有打对勾,这是热部署的依赖
- learning gcc __BEGIN_DECLS and __END_DECLS
__BEGIN_DECLS and __END_DECLS be use for mix C and C++
- luogu P4843 清理雪道
嘟嘟嘟 这其实就是一个最小流的板子题.把每一条边的流量至少为1,然后建立附加源汇跑一遍最大流,连上\(t, s\),再跑一遍最大流就是答案. 刚开始我想错了:统计每一个点的出度和入度,去两者较大值\( ...