【发布时间】:2016-04-08 01:33:39
【问题描述】:
如果我有一张桌子:
Table A
Column1(Primary Key) | Column2 | Column3
我如何确保在插入新行时,如果具有该主键的行已经存在,它不会插入新行?
我当前的 c# 代码和 SQL 命令:
string sqlConnectionString = ConfigurationManager.ConnectionStrings["blah"].ConnectionString;
string cmdString = "INSERT INTO TableA (Column1,Column2,Column3) VALUES (@val1, @val2, @val3)";
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
comm.CommandText = cmdString;
comm.Parameters.AddWithValue("@val1", x);
comm.Parameters.AddWithValue("@val2", y);
try
{
conn.Open();
comm.ExecuteNonQuery();
}
Catch(SqlException e)
{
// do something with the exception
// don't hide it
}
}
}
由于 Column1 被指定为主要,这是否会自动处理?
编辑:
我在使用 WHERE 下面的 SQL 命令时遇到错误,有什么想法吗?
"INSERT INTO TableA (Column1,Column2) VALUES (@val1, @val2) WHERE 不存在(从 TableA 中选择 1,其中 Column1 = @val1)"
【问题讨论】:
-
添加
WHERE NOT EXISTS (SELECT 1 FROM TableA WHERE Column1 = @val1) -
为什么我们不能自动生成
-
没有我可以使用的 UNIQUE/DISTINCT 标签吗?我必须在一个全新的查询上使用 WHERE NOT EXISTS 吗?
-
您是否调查了使用 MERGE 指令而不是 INSERT 的解决方案?
标签: c# sql-server