前言

参考: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不存在便插入存在不执行操作的更多相关文章

  1. 关于mysql安装后在客户端cmd插入语句无法执行的问题

    关于mysql安装后在客户端cmd插入语句无法执行的问题 因为windows cmd默认字符集是gbk,当character_set_client=utf8时,cmd中出现中文会报错:characte ...

  2. 使用twisted将mysql插入变成异步执行

    python 异步MySQL存库   对于异步框架而言,这些延迟是无法接受的.因此, Twisted 提供了 twisted.enterprise.adbapi, 遵循DB-API 2.0协议的一个异 ...

  3. 【spring data jpa】使用spring data jpa时,关于service层一个方法中进行【删除】和【插入】两种操作在同一个事务内处理

    场景: 现在有这么一个情况,就是在service中提供的一个方法是先将符合条件的数据全部删除,然后再将新的条件全部插入数据库中 这个场景需要保证service中执行两步 1.删除 2.插入 这两步自然 ...

  4. 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚

      最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.     有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过.     可以在这里看到相关的 ...

  5. C# 对包含文件或目录路径信息的 System.String 实例执行操作

    在字符串操作中有一类比较特殊的操作,就是对包含文件或目录路径信息的 System.String 实例执行操作.比如根据一个表示路径的字符串获取其代表的文件名称.文件夹路径.文件扩展名等.在很多时候,我 ...

  6. [转]js中confirm实现执行操作前弹出确认框的方法

    原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在 ...

  7. 利用Fiddler修改请求信息通过Web API执行操作(Action)实例

    本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  8. php定时执行操作及ob_flush()与flush()的使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/qq_38125058 一: 每隔30s执行一次,将字符串写入文件 // 30秒执行一次 ignore_ ...

  9. dotnetcore ef 调用多个数据库时用户命令执行操作报错

    dotnetcore ef 调用多个数据库时用户命令执行操作报错 1.多个DbContext 时报错: 报错: More than one DbContext was found. Specify w ...

随机推荐

  1. Jmeter生成HTML测试报告

    jmeter轻便小巧,运行速度快,但是缺少直观的可视化测试报告,并且生成测试报告操作稍微有点麻烦. GUI界面没有生成测试报告的功能,只能使用命令行生成测试报告.这里需要提到一个jtl的文件,它是生成 ...

  2. 蓝桥杯——剪邮票(2016JavaB组第10题)

    剪邮票(16JavaB10) 如[图1], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2],[图3]中,粉红色所示部分就是合 ...

  3. 容器中实现拉取其它服务器的jar包程序

    缘由:在做接口自动化测试时,若业务场景有一个前置仓库,在该仓库内完成一系列的场景测试,一旦某一场景测试失败,脏数据对环境造成影响则需要清理: 1.我容器的内核系统为Debian GNU/Linux 1 ...

  4. partial conv

    Image Inpainting for Irregular Holes Using Partial Convolutions pytorch代码 论文贡献: 提出了部分卷积(partial conv ...

  5. 路由器/交换机Console口登录密码丢失后如何恢复

    Console口登录密码丢失后如何恢复 如果忘记了Console口登录密码,用户可以通过以下两种方式来设置新的Console口登录密码. 通过STelnet/Telnet登录路由器/交换机设置新的Co ...

  6. IdentityServer4系列 | 资源密码凭证模式

    一.前言 从上一篇关于客户端凭证模式中,我们通过创建一个认证授权访问服务,定义一个API和要访问它的客户端,客户端通过IdentityServer上请求访问令牌,并使用它来控制访问API.其中,我们也 ...

  7. 【2020.12.02提高组模拟】球员(player)

    题目 题目描述 老师们已经知道学生喜欢睡觉,Soaring是这项记录保持者.他只会在吃饭或玩FIFA20时才会醒来.因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的 ...

  8. day1(ModelViewSet序列化限流排序)

    1.DRF初始化 1.认证 2.权限 3.限流 4.序列化 5.分页 6.版本  7.过滤 8.排序 1.1安装DjangoRestFramework pip install djangoresfra ...

  9. Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结

    一. 前言 在之前的文章中 IDEA集成Docker插件实现一键自动打包部署微服务项目,其中开放了服务器2375端口监听,此做法却引发出来一个安全问题,在上篇文章评论也有好心的童鞋提示,但自己心存侥幸 ...

  10. "迎圣诞,拿大奖"赛题——SQLI

    0x01 本题所需知识清单: 1.php sprintf()函数漏洞:https://blog.csdn.net/WQ_BCJ/article/details/85057447 2.布尔盲注基本pla ...