簡體   English   中英

批量更新SQL Server C#

[英]Bulk update SQL Server C#

我有一個270k行的數據庫,主鍵為mid ,列為value ,我有一個帶有mid和值的文本文件。 現在我想更新表格,以便將每個值分配給正確的mid。

我目前的方法是從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]) };
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM