批量更新 SQL Server C#
本文关键字:Server SQL 更新 | 更新日期: 2023-09-27 18:32:15
我有一个 270k 行的数据库,其中包含主键mid
和一个名为 value
的列,我有一个包含 mid's 和值的文本文件。现在我想更新表格,以便将每个值分配给正确的中间值。
我目前的方法是从 C# 读取文本文件,并为我读取的每一行更新表中的一行。必须有更快的方法来做我觉得的事情。有什么想法吗?
编辑:表中还有其他列,所以我真的需要一种方法来根据mid进行更新。
您可以使用 SQL Server 导入和导出向导:
http://msdn.microsoft.com/en-us/library/ms141209.aspx
或者,您可以使用 BULK
TSQL 语句:
BULK
INSERT YourTable
FROM 'c:'YourTextFile.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = ''n'
)
GO
SELECT * FROM YourTable
GO
假设您在逗号分隔符上拆分。 如果使用其他字符(如空格),请将 FIELDTERMINATOR 更改为关联的字符。
编辑(从我的评论中实现更新):
UPDATE RealTable
SET value = tt.value
FROM
RealTable r
INNER JOIN temp_table tt ON r.mid = tt.mid
你重复使用SqlCommand
吗?
struct Item
{
public int mid;
public int value;
}
public int Update(string connectionstring)
{
int res = 0;
using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
using (cmd.Connection = new System.Data.SqlClient.SqlConnection(connectionstring))
{
cmd.CommandText = @"UPDATE [table] SET [value] = @value WHERE [mid] = @mid;";
cmd.CommandType = CommandType.Text;
System.Data.SqlClient.SqlParameter mid = cmd.Parameters.Add("@mid", SqlDbType.VarChar);
System.Data.SqlClient.SqlParameter value = cmd.Parameters.Add("@value", SqlDbType.VarChar);
try
{
cmd.Connection.Open();
foreach (Item item in GetItems("pathttothefile"))
{
mid.Value = item.mid;
value.Value = item.value;
res += cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
}
finally
{
cmd.Connection.Close();
}
}
return res;
}
IEnumerable<Item> GetItems(string path)
{
string[] line;
foreach (var item in System.IO.File.ReadLines(path))
{
line = item.Split(',');
yield return new Item() { mid = int.Parse(line[0]), value = int.Parse(line[1]) };
}
}