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

Memperbarui 4 juta catatan di server SQL menggunakan daftar id catatan sebagai input

Cara terbaik untuk mendekati permintaan ini adalah dengan memasukkan 4 juta catatan ke dalam tabel. Bahkan, Anda dapat menempatkannya ke dalam tabel dengan kolom identitas, dengan "menyisipkan secara massal" ke dalam tampilan.

create table TheIds (rownum int identity(1,1), id int);

create view v_TheIds (select id from TheIds);

bulk insert into v_TheIds . . .

Dengan semua data dalam database, Anda sekarang memiliki lebih banyak pilihan. Coba pembaruan:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id)

Anda juga harus membuat indeks di TheIds(id) .

Ini adalah pembaruan besar, semua dieksekusi sebagai satu transaksi. Itu dapat memiliki implikasi kinerja yang buruk dan mulai mengisi log. Anda dapat memecahnya menjadi transaksi yang lebih kecil menggunakan rownum kolom:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id and TheIds.rownum < 1000)

Klausa yang ada di sini melakukan hal yang setara dengan left outer join . Perbedaan utama adalah bahwa sintaks subquery yang berkorelasi ini harus bekerja di database lain, di mana gabungan dengan pembaruan adalah khusus database.

Dengan rownum kolom, Anda dapat memilih baris sebanyak yang Anda inginkan untuk pembaruan. Jadi, Anda dapat menempatkan pembaruan dalam satu lingkaran, jika pembaruan keseluruhan terlalu besar:

where rownum < 100000
where rownum between 100000 and 199999
where rownum between 200000 and 299999

dan seterusnya. Anda tidak perlu melakukan ini, tetapi Anda dapat melakukannya jika ingin mengelompokkan pembaruan karena alasan tertentu.

Ide utamanya adalah memasukkan daftar id ke dalam tabel di database, sehingga Anda dapat menggunakan kekuatan database untuk operasi selanjutnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. menyimpan kata sandi di SQL Server

  2. Membuat Tabel di SQL Server (T-SQL)

  3. Bentrokan tipe operan:int tidak sesuai dengan tanggal + Pernyataan INSERT bertentangan dengan batasan FOREIGN KEY

  4. Prosedur tersimpan yang mengekspor data ke file csv hanya mengekspor ke satu file

  5. TAMPILKAN DATABASES Setara di SQL Server – sp_databases