sql-server - 插入前检查现有记录

标签 sql-server c#-2.0

我想使用 C# 和 SQL Server 2000 作为数据库插入多条记录(~1000),但在插入之前如何检查我插入的记录是否已经存在,如果存在,则应插入下一条记录。记录来自结构化的 excel 文件,然后我将它们加载到通用集合中并遍历每个项目并像这样执行插入

// Insert records into database
private void insertRecords() {

  try {
    // iterate through all records 
    // and perform insert on each iteration
    for (int i = 0; i < names.Count; i++) {
      sCommand.Parameters.AddWithValue("@name", Names[i]);
      sCommand.Parameters.AddWithValue("@person", ContactPeople[i]);
      sCommand.Parameters.AddWithValue("@number", Phones[i]);
      sCommand.Parameters.AddWithValue("@address", Addresses[i]); 

      // Open the connection
      sConnection.Open();
      sCommand.ExecuteNonQuery();
      sConnection.Close();

    }
  } catch (SqlException ex) {
    throw ex;
  }
}

此代码使用存储过程插入记录,但我可以在插入前检查记录吗?

最佳答案

在您的存储过程中,您可以进行如下检查(猜测表名和列名,因为您没有指定):

IF EXISTS(SELECT * FROM dbo.YourTable WHERE Name = @Name)
     RETURN

-- here, after the check, do the INSERT

您可能还想在 Name 上创建唯一索引列以确保不存在具有相同值的两行:
CREATE UNIQUE NONCLUSTERED INDEX UIX_Name
   ON dbo.YourTable(Name)

关于sql-server - 插入前检查现有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017840/

相关文章:

c# - .net 库不从 app.config 中选择 key

SQL Server 查询 - 为什么会出现死锁?

c# - 连接字符串 : is it the right form?

sql - 更新、查找/替换 xml 字段

sql-server - 使用T SQL在指定位置创建数据库

C# Xml 序列化和反序列化

c# - 从数据库中读取 SQL Varbinary Blob

c# - 如何将由分隔符分隔的控件调整为超出其容器面板大小?

sql-server - 在 SQL 和 C# 中根据出生日期计算年龄?

c# - StringToByteArray() 在 C# 2.0 中抛出异常