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判断新增/修改的更多相关文章

  1. [mysql]SQL语句-新增/修改 创建时间 更新时间

    SQL关键词 要注意大小写   已建表,之前没有创建时间列, 现新增1列创建时间,并设置默认值为当前时间 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER T ...

  2. SQL语句大全(mysql,sqlserver,oracle)

    SQL语句大全 --语句功能--数据操作SELECT --从数据库表中检索数据行和列-selectINSERT --向数据库表添加新数据行-insertDELETE --从数据库表中删除数据行-del ...

  3. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  4. Oracle忘记用户名和密码以及管理员用户新增修改删除用户

    Oracle忘记密码: 1.以管理员身份登录,打开dos窗口,输入 sqlplus / as sysdba 回车 2.查看当前用户和状态 select username, account_status ...

  5. Oracle数据库该如何着手优化一个SQL

    这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...

  6. 使用oracle 的 PL/Sql 定时执行一个存储过程

    CSDN日报20170322--<关于软件研发的一些体会总结> 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...

  7. ORACLE里怎么能判断一个日期类型的字段是否为空,解决方法:is null

    ORACLE里怎么能判断一个日期类型的字段是否为空,解决方法:is null,解决方法:判断什么null都可以用is null.

  8. db2 中 SQL判断物理表是否存在、修改表名

    1.db2 中 SQL判断物理表是否存在 SELECT * FROM SYSIBM.SYSTABLES WHERE TID <> 0 AND Name = 'TABLE_NAME' AND ...

  9. Oracle数据库常用Sql语句大全

    一,数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ...

随机推荐

  1. [Abp vNext微服务实践] - 业务开发

    前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...

  2. IIS教程:因权限问题被拒绝访问的解决方案

    https://blog.csdn.net/a497785609/article/details/49952281 写了一个类IISAdmin,负责建立.设置.删除虚拟目录,发现在web中调用,遇到权 ...

  3. 说一下 HashSet 的实现原理?(未完成)

    说一下 HashSet 的实现原理?(未完成)

  4. ServiceLoader在SPI中的重要作用分析

    对于线程上下文类加载器在之前已经对它进行了详细的理论化的学习,其中对于这个类加载器应用最多的也就是在SPI场合下用来打破双亲委托机制,如之前所描述的: 这次举一个具体的例子来进一步的加深对线程上下文类 ...

  5. C语言Ⅰ|博客作业07

    这个作业属于哪个课程 C语言程序设计Ⅰ 这个作业要求在哪里 https://www.cnblogs.com/tongyingjun/p/11809219.html 我在这个课程的目标是 熟练掌握swi ...

  6. google chrome调试

    1,同样的代码使用firefox运行不会报错,正常运行. 2,同样的代码使用google chrome 有时候会误报网页? 如下:代码可以在 firfox edge正常运行,在chrome  oper ...

  7. uint128_t 添加 c++ 重载类型强制转换

    类型声明: class uint128 { public: uint128() :hi(), lo(){} uint128(uint32_t l) :hi(), lo(l){} uint128(int ...

  8. EasyLogging++学习笔记(1)—— 简要介绍

    对于有开发经验的程序员来说,记录程序执行日志是一件必不可少的事情.通过查看和分析日志信息,不仅可以有效地帮助我们调试程序,而且当程序正式发布运行之后,更是可以帮助我们快速.准确地定位问题.在现在这个开 ...

  9. CI环境搭建下-Jenkis与git结合

     设置权限:  也可以通过公私钥的方式,添加权限,公私钥填写在gitblit用户中心:  Jenkins中填写私钥: 添加: 添加后如果仍然报错,是因为windows下要使用http的地址. 在此,可 ...

  10. aarch-linux-gnu-g++ install

    # apt install g++-aarch64-linux-gnuReading package lists... 0% Reading package lists... Done Buildin ...