sql >> データベース >  >> RDS >> Sqlserver

C#での一括更新

    以前に行ったことは、データから一時テーブルへの一括挿入を実行してから、コマンドまたはストアドプロシージャを使用して、一時テーブルを宛先テーブルに関連付けるデータを更新することです。一時テーブルは追加の手順ですが、データを行ごとに更新する場合と比較して、行数が多い場合は、一括挿入と大規模な更新によってパフォーマンスを向上させることができます。

    例:

    public static void UpdateData<T>(List<T> list,string TableName)
    {
        DataTable dt = new DataTable("MyTable");
        dt = ConvertToDataTable(list);
    
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
        {
            using (SqlCommand command = new SqlCommand("", conn))
            {
                try
                {
                    conn.Open();
    
                    //Creating temp table on database
                    command.CommandText = "CREATE TABLE #TmpTable(...)";
                    command.ExecuteNonQuery();
    
                    //Bulk insert into temp table
                    using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conn))
                    {
                        bulkcopy.BulkCopyTimeout = 660;
                        bulkcopy.DestinationTableName = "#TmpTable";
                        bulkcopy.WriteToServer(dt);
                        bulkcopy.Close();
                    }
    
                    // Updating destination table, and dropping temp table
                    command.CommandTimeout = 300;
                    command.CommandText = "UPDATE T SET ... FROM " + TableName + " T INNER JOIN #TmpTable Temp ON ...; DROP TABLE #TmpTable;";
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    // Handle exception properly
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    

    一時テーブルのスコープは接続ごとであるため、各ステップで一時テーブルを使用できるようにするために、単一の接続を使用して操作全体を実行することに注意してください。



    1. PostgreSQLデータベースを復元する際の特権の問題を解決する方法

    2. NHibernateでNUMBEROracleデータ型をマッピングするのに最適な.NETデータ型はどれですか?

    3. SQL Server(T-SQL)でサーバー照合を表示する方法

    4. OracleでUTF8文字セットを構成するにはどうすればよいですか?