Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Saya memiliki Tabel Tag. Bagaimana cara menyisipkan Massal menggunakan LINQ?

LINQ adalah permintaan teknologi, tapi saya pikir kami tahu apa yang Anda maksud; Anda mungkin ingin sedikit lebih spesifik apakah ini LINQ-to-SQL atau Entity Framework. Anda mungkin juga ingin mengklarifikasi apa arti "massal" dalam kasus Anda... untuk 10-100 catatan, Anda mungkin menggunakan jawaban berbeda untuk 10.000 catatan (di mana SqlBulkCopy ke dalam tabel pementasan dan prosedur tersimpan untuk mengimpor di db akan menjadi ide terbaik).

Untuk jumlah yang relatif rendah - cukup gunakan alat ORM Anda untuk menemukan catatan - misalnya dengan LINQ-to-SQL (mungkin dengan rentang transaksi serializable) - dan menggunakan C# untuk ilustrasi (diperbarui untuk menampilkan loop dan cache ):

Dictionary<string,Tag> knownTags = new Dictionary<string,Tag>();
foreach(... your data ...) {
    Tag tag;
    if(!knownTags.TryGetValue(tagName, out tag)) {
        tag = ctx.Tags.SingleOrDefault(t => t.Name == tagName);
        if(tag == null) {
            tag = new Tag { Name = tagName };
            ctx.Tags.InsertOnSubmit(tag);
        }
        knownTags.Add(tagName, tag);
    }
    // insert video tag
}
ctx.SubmitChanges();

Sebenarnya, untuk alasan kinerja saya bertanya-tanya apakah ini mungkin salah satu kesempatan di mana kunci alami masuk akal - yaitu gunakan Tags (varchar ) sebagai kunci utama, dan duplikat (sebagai kunci asing) di VideoTags - maka Anda tidak perlu bergabung dengan Tags meja sepanjang waktu.

Jika angkanya lebih besar, cukup mudah menggunakan SqlBulkCopy; cukup masukkan data ke dalam DataTable dan dorong, lalu lakukan pekerjaan di TSQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. apa pengaturan registri untuk mengaktifkan TCP pada SQL Server 2005 dan 2008?

  2. Bila tidak ada 'Pesan berdasarkan' yang ditentukan, urutan apa yang dipilih kueri untuk kumpulan rekaman Anda?

  3. SSMS versi 18 – tanpa Diagram Basis Data

  4. Kesalahan overflow aritmatika (numerik ke numerik) dengan MERGE:SQL Server bug?

  5. Sql Server setara dengan fungsi agregat COUNTIF