Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tham số bảng giá trị:gửi dữ liệu theo từng phần nhỏ

Một ví dụ về việc sử dụng IEnumerable SqlDataRecord
Nó hoạt động giống như một chương trình dữ liệu ngược

Chú ý tôi sắp xếp. Đây là bởi chỉ mục được phân nhóm. Sự phân mảnh của các chỉ mục sẽ giết chết tốc độ tải. Lần triển khai đầu tiên sử dụng Giá trị Chèn (không được sắp xếp) và trong 12 giờ chạy phiên bản này nhanh hơn 100 lần theo đúng nghĩa đen. Tôi cũng vô hiệu hóa các chỉ mục khác với PK và lập chỉ mục khi kết thúc tải. Về lâu dài, tôi nhận được khoảng 500 hàng / giây. Mẫu của bạn là 1400 / giây quá tuyệt vời. Nếu bạn bắt đầu thấy sự xuống cấp thì những thứ cần xem xét.

public class DocFTSinXsCollection : List<DocFTSinX>, IEnumerable<SqlDataRecord>
{
    // used by TVP for fast insert
    private int sID;
    private IEnumerable<DocFTSinX> docFTSinXs;
    IEnumerator<SqlDataRecord> IEnumerable<SqlDataRecord>.GetEnumerator()
    {
        //todo fix the order in 3 to sID, wordID1, workID2
        var sdr = new SqlDataRecord(
        new SqlMetaData("wordID1", System.Data.SqlDbType.Int),
        new SqlMetaData("wordID2", System.Data.SqlDbType.Int),
        new SqlMetaData("sID", System.Data.SqlDbType.Int),
        new SqlMetaData("Delta", System.Data.SqlDbType.Int));
        foreach (DocFTSinX oh in docFTSinXs.OrderBy(x => x.Word1).ThenBy(x => x.Word2))
        {
            sdr.SetInt32(0, oh.Word1);
            sdr.SetInt32(1, oh.Word2);
            sdr.SetInt32(2, sID);
            sdr.SetInt32(3, (Int32)oh.Delta);
            yield return sdr;
        }
    }

    public DocFTSinXsCollection(int SID, IEnumerable<DocFTSinX> DocFTSinXs)
    {
        sID = SID;
        docFTSinXs = DocFTSinXs;
        //Debug.WriteLine("DocFTSinXsCollection DocFTSinXs " + DocFTSinXs.Count().ToString());
    }
}

Các công cụ khác cần xem xét là lớp SQLBulkCopy .NET và Drapper.

OP hỏi cách thực hiện theo lô.

 while (true)
 {
     // if no more break;
     // fill list or datatable with next 100000
     // send list or datatable to db
 }



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách so sánh datetime với chỉ ngày trong SQL Server

  2. Mở liên kết trong cửa sổ mới trong báo cáo pha lê

  3. Kiểu dữ liệu SYSNAME trong SQL Server là gì?

  4. Chèn hàng loạt SQL Server - Phần 2

  5. Các quy tắc sử dụng Tham số nội bộ trong SSRS là gì