mssql不存在便插入存在不执行操作
前言
参考:https://www.jb51.cc/mssql/76911.html
在mssql中,在记录不存在时插入记录,如果存在则不执行操作
数据库
相关语句
--创建表
CREATE TABLE Users
(
UserId VARCHAR(50) PRIMARY KEY,
UserName NVARCHAR(20),
Age INT NOT NULL
) --直接插入
INSERT INTO Users VALUES('12138','Wen',2) --经sql判断的插入
INSERT INTO Users
SELECT '12138' UserId ,'Wen' UserName,2 Age
FROM(SELECT '12138' UserId ,'Wen' UserName,2 Age) A
LEFT JOIN Users B
ON B.UserId=A.UserId
WHERE B.UserId IS NULL --清空表数据
TRUNCATE TABLE Users
控制台程序测试
sql帮助类

1 using System;
2 using System.Data;
3 using System.Data.SqlClient;
4
5 namespace ConTest.Core
6 {
7 public class SqlDBHelper
8 {
9 /// <summary>
10 /// 执行查询语句,返回DataSet
11 /// </summary>
12 /// <param name="sSQLString">查询语句</param>
13 /// <returns>DataSet</returns>
14 public static DataSet Query(string sDBConnectionString, string sSQLString)
15 {
16 using (SqlConnection connection = new SqlConnection(sDBConnectionString))
17 {
18 DataSet ds = new DataSet();
19 try
20 {
21 connection.Open();
22 SqlDataAdapter command = new SqlDataAdapter(sSQLString, connection);
23 command.Fill(ds, "ds");
24 }
25 catch (System.Data.SqlClient.SqlException ex)
26 {
27 throw new Exception(ex.Message);
28 }
29 return ds;
30 }
31 }
32
33 /// <summary>
34 /// 执行SQL语句,返回影响的记录数
35 /// </summary>
36 /// <param name="SQLString">SQL语句</param>
37 /// <returns>影响的记录数</returns>
38 public static int ExecuteSql(string sDBConnectionString, string SQLString)
39 {
40 using (SqlConnection connection = new SqlConnection(sDBConnectionString))
41 {
42 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
43 {
44 try
45 {
46 connection.Open();
47 int rows = cmd.ExecuteNonQuery();
48 return rows;
49 }
50 catch (System.Data.SqlClient.SqlException E)
51 {
52 connection.Close();
53 throw new Exception(E.Message);
54 }
55 }
56 }
57 }
58 }
59 }
控制台程序

1 using ConTest.Core;
2 using System;
3 using System.Text;
4 using System.Threading.Tasks;
5
6 namespace ConTest
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 StringBuilder sbSql = new StringBuilder();
13
14 Parallel.For(0, 10, item =>
15 {
16 try
17 {
18 //直接插入
19 //var i = SqlDBHelper.ExecuteSql(ConstValues.SqlServerDBStr, $" INSERT INTO Users VALUES('12138','Wen',2); ");
20
21 //经sql判断的插入
22 var i = SqlDBHelper.ExecuteSql(ConstValues.SqlServerDBStr,
23 @"
24 INSERT INTO Users
25 SELECT '12138' UserId ,'Wen' UserName,2 Age
26 FROM(SELECT '12138' UserId ,'Wen' UserName,2 Age) A
27 LEFT JOIN Users B
28 ON B.UserId=A.UserId
29 WHERE B.UserId IS NULL
30 ");
31
32 sbSql.AppendLine($"True,Line:{i}");
33 }
34 catch (Exception ex)
35 {
36 sbSql.AppendLine($"False,{ex.Message}");
37 }
38 });
39
40 Console.WriteLine(sbSql.ToString());
41
42 Console.Read();
43 }
44 }
45 }
静态值

1 namespace ConTest.Core
2 {
3 /// <summary>
4 /// 静态值
5 /// </summary>
6 public class ConstValues
7 {
8 /// <summary>
9 /// 数据库连接字符串
10 /// </summary>
11 public static string SqlServerDBStr = "data source=.;Initial Catalog=ConTest;integrated security=true;";
12 }
13 }
运行结果
直接插入

经sql判断

结语
实现标题描述
mssql不存在便插入存在不执行操作的更多相关文章
- 关于mysql安装后在客户端cmd插入语句无法执行的问题
关于mysql安装后在客户端cmd插入语句无法执行的问题 因为windows cmd默认字符集是gbk,当character_set_client=utf8时,cmd中出现中文会报错:characte ...
- 使用twisted将mysql插入变成异步执行
python 异步MySQL存库 对于异步框架而言,这些延迟是无法接受的.因此, Twisted 提供了 twisted.enterprise.adbapi, 遵循DB-API 2.0协议的一个异 ...
- 【spring data jpa】使用spring data jpa时,关于service层一个方法中进行【删除】和【插入】两种操作在同一个事务内处理
场景: 现在有这么一个情况,就是在service中提供的一个方法是先将符合条件的数据全部删除,然后再将新的条件全部插入数据库中 这个场景需要保证service中执行两步 1.删除 2.插入 这两步自然 ...
- 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过. 可以在这里看到相关的 ...
- C# 对包含文件或目录路径信息的 System.String 实例执行操作
在字符串操作中有一类比较特殊的操作,就是对包含文件或目录路径信息的 System.String 实例执行操作.比如根据一个表示路径的字符串获取其代表的文件名称.文件夹路径.文件扩展名等.在很多时候,我 ...
- [转]js中confirm实现执行操作前弹出确认框的方法
原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在 ...
- 利用Fiddler修改请求信息通过Web API执行操作(Action)实例
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- php定时执行操作及ob_flush()与flush()的使用
版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/qq_38125058 一: 每隔30s执行一次,将字符串写入文件 // 30秒执行一次 ignore_ ...
- dotnetcore ef 调用多个数据库时用户命令执行操作报错
dotnetcore ef 调用多个数据库时用户命令执行操作报错 1.多个DbContext 时报错: 报错: More than one DbContext was found. Specify w ...
随机推荐
- Linux(CentOS 7下httpd的安装)
Linux(CentOS 7下httpd的安装) 自己是个linux小白.最近几天在学linux,看到视频教程中安装源码包httpd所以自己想试一试,安装过程中有很多的错误,在网上找了很久也没找到,要 ...
- Python实现树莓派摄像头持续录像并传送到主机
关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文读法,树莓派诞生于英国,由"Raspberry Pi 基金会"这个慈善组织注册开 ...
- idea 安装教程
臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭 ...
- web.xml之servlet与filter配置
servlet配置 一个完整的servlet配置分为两块,< servlet >块和< servlet-mapping >块 < servlet > <ser ...
- spring aop 、Redis实现拦截重复操作
一.问题:项目中有一些重复操作的情况,比如: 1.从场景有用户快速点击提交按钮,或者postMan测试时快速点击 2.从业务上来说,用户注册.用户下单等 3.黑客攻击 二.解决办法 1.使用sprin ...
- Django----初始化项目结构
1.初始化项目结构图 │ .gitignore # 提交git仓库时,不提交的文件必须要在这里进行标注 │ README.en.md # 英文(项目介绍) │ README.md # 中文项目简介 │ ...
- 学习abp vnext框架到精简到我的Vop框架
学习目标 框架特点 基于.NET 5平台开发 模块化系统 极少依赖 极易扩展 ....... 框架目的 学习.NET 5平台 学习abp vnext 上图大部分功能已经实现,多数是参考(copy)ab ...
- PyQt(Python+Qt)学习随笔:QSlider滑动条部件功能简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Horizo ...
- PyQt(Python+Qt)学习随笔:自定义信号在emit发射信号时报错:AttributeError: object has no attribute
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例 ...
- PHP代码审计分段讲解(4)
08 SESSION验证绕过 源代码为: <?php $flag = "flag"; session_start(); if (isset ($_GET['passw ...