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的现有行将保持原样(无更新)
- 正在插入新行
- 将.CSV大容量加载到临时暂存表中
- 使用
命令(希望您使用的是SQL Server2008或更新版本!)从临时表更新实际表;这允许轻松插入新行和更新(而不是忽略)预先存在的行MERGE