Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在更新SQL Server数据库而不使用重复项_C#_Sql Server - Fatal编程技术网

C# 正在更新SQL Server数据库而不使用重复项

C# 正在更新SQL Server数据库而不使用重复项,c#,sql-server,C#,Sql Server,几个月前我编写了这个程序,它对这些大型.CSV文件进行了划分,并将它们上传到SQL Server数据库中。由于.CSV文件基本上每次都会添加新数据,因此我刚刚对其进行了设置,以便用户每次上传数据时都会删除表中的所有内容,并上传新添加的数据,如下所示: myConnection.Open(); string sql = @"DELETE FROM TestTable;"; SqlCommand cmd = new SqlCommand(sql, myConnection); cmd.Execute

几个月前我编写了这个程序,它对这些大型
.CSV
文件进行了划分,并将它们上传到SQL Server数据库中。由于
.CSV
文件基本上每次都会添加新数据,因此我刚刚对其进行了设置,以便用户每次上传数据时都会删除表中的所有内容,并上传新添加的数据,如下所示:

myConnection.Open();
string sql = @"DELETE FROM TestTable;";
SqlCommand cmd = new SqlCommand(sql, myConnection);
cmd.ExecuteNonQuery();
myConnection.Close();
现在我必须将其设置为上传数据,而不删除表中以前的条目,但问题是我不能有重复的数据。幸运的是,
.CSV
文件为我用作主键的每一行提供了唯一的标识符,但我很难想出实现这一点的算法。是否有类似于上面的
DELETE
语法的东西,我可以与SQL Server一起使用,只更新唯一的数据?我之所以问你们,是因为我不是SQL Server方面最大的专家

我有两个不同的类和后台工作者,所以不想通过所有的代码,因为它的很多,但如果你们需要任何细节让我知道

编辑

这里有一个例子:

我很确定我需要做什么,但我唯一困惑的是什么是dataSet1,它从哪里来?我只是使用连接字符串打开到SQL Server数据库的连接,然后使用
SqlDataAdapter
执行插入等功能

如果有人对此有任何澄清,那将是非常有帮助的

谢谢

实现这一点的一个省钱方法是在SQL Server中的唯一标识列上创建一个唯一索引,并告诉它只需忽略任何重复项即可

CREATE UNIQUE INDEX UIX_YourIndexNameHere
ON dbo.YourTableNameHere(YourUniqueColumnNameHere)
WITH (IGNORE_DUP_KEY = ON);
这意味着:

  • SQL Server将只允许此列中的唯一值-不允许重复
  • 如果插入了任何副本,它们将被抛出而不会引起任何错误(“无声忽略”,可以这么说)
这也意味着:

  • 可能的重复项将被忽略-该唯一ID的现有行将保持原样(无更新)
  • 正在插入新行
如果需要使用预先存在的行的ID更新这些行,我建议您执行以下操作:

  • 将.CSV大容量加载到临时暂存表中
  • 使用
    MERGE
    命令(希望您使用的是SQL Server2008或更新版本!)从临时表更新实际表;这允许轻松插入新行和更新(而不是忽略)预先存在的行

如果您有唯一的id,您可以在未找到id的情况下插入,否则可以忽略或更新现有数据…未找到的语法是什么?SQL Server(Microsoft)您可以说“现在我必须将其设置为上载数据,而不删除表中以前的条目…”。问题是,为什么现在必须上传而不删除以前的数据?这个问题的答案应该决定什么是最好的方法。