从 CSV 文件插入 SQL Server 2008 时如何避免重复数据?
#region Put to SQL
string line = null;
bool IsFirst = true;
string SqlSyntax = "INSERT INTO ORDRE ";
string sqlkey = "";
string sqlvalSELECT = "";
using (StreamReader sr = File.OpenText(filePath + "\\" + downloadname))
{
while ((line = sr.ReadLine()) != null)
{
string[] data = line.Split(';');
if (!String.IsNullOrEmpty(sqlvalSELECT)) sqlvalSELECT += "\nUNION ALL ";
if (data.Length > 0)
{
string sqlval = "";
foreach (object item in data)
{
if (IsFirst)
{
if (!String.IsNullOrWhiteSpace(sqlkey)) sqlkey += ",";
sqlkey += item.ToString();
}
else
{
if (!String.IsNullOrEmpty(sqlval)) sqlval += ",";
sqlval += item.ToString();
}
}
if (!String.IsNullOrEmpty(sqlval)) sqlvalSELECT += "SELECT " + sqlval;
IsFirst = false;
}
}
}
string sqlTOTAL = SqlSyntax + "(" + sqlkey + ")" + sqlvalSELECT;
//lbl_Message.Text = sqlTOTAL;
try
{
using (var connectionWrapper = new Connexion())
{
var connectedConnection = connectionWrapper.GetConnected();
SqlCommand comm_Ftp_Insert = new SqlCommand(sqlTOTAL, connectionWrapper.conn);
comm_Ftp_Insert.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
我制定了收集已导入 SQL Server 2008 的数据的方法。 我如何将其与 CSV 文件进行比较?
/// <summary>
/// Get the existed data on SQL
/// </summary>
/// <returns>Return List of Pers_Ordre with key OrdreId and ClientID</returns>
public List<Pers_Ordre> Get_Existed()
{
try
{
using (var connectionWrapper = new Connexion())
{
var connectedConnection = connectionWrapper.GetConnected();
List<Pers_Ordre> oListOdr = new List<Pers_Ordre>();
string sql_Syntax = Outils.LoadFileToString(HttpContext.Current.Server.MapPath("~/SQL/OrdreFTP_GetExist.sql"));
SqlCommand comm_Command = new SqlCommand(sql_Syntax, connectionWrapper.conn);
SqlDataReader readerOne = comm_Command.ExecuteReader();
while (readerOne.Read())
{
Pers_Ordre oPersOrdre = new Pers_Ordre();
oPersOrdre.OrdreId = Convert.ToInt32(readerOne["NO_ORDRE"]);
oPersOrdre.ClientID = readerOne["CODE_CLIENT"].ToString();
oListOdr.Add(oPersOrdre);
}
return oListOdr;
}
}
catch (Exception excThrown)
{
throw new Exception(excThrown.Message);
}
}
提前谢谢您, 史蒂夫
最佳答案
为什么不直接将 csv 中的数据插入到临时表中,然后过滤插入到目标表中的内容以删除重复行。这样你就可以让数据库完成工作,无论如何都会更快。
这是满足您需求的最简单的 SQL
insert into Order
select * from Order_Temp
WHERE NOT EXISTS
(
SELECT X
FROM Order o
WHERE o.NO_ORDRE = Order_Temp.NO_ORDRE
AND o.CODE_CLIENT = Order_Temp.CODE_CLIENT
)
希望对你有帮助
关于c# - 从 CSV 执行 SQL INSERT 时如何避免重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591866/