前言
参考:https://www.jb51.cc/mssql/76911.html
在mssql中,在记录不存在时插入记录,如果存在则不执行操作
2022年5月22日10:30:28,跟进问题
后续发现接口并发时,还是会有主键重复的问题。所以只使用下面的sql语句,还是无法控制主键重复的并发问题
数据库
相关语句
--创建表 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 }