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

Pernyataan pembaruan sederhana sehingga semua baris diberi nilai yang berbeda

Pada beberapa tabel pengujian, akhir saya, rencana awal Anda terlihat sebagai berikut.

Itu hanya menghitung hasilnya sekali dan menyimpannya di sppol lalu memutar ulang hasil itu. Anda dapat mencoba yang berikut ini agar SQL Server melihat subkueri sebagai berkorelasi dan perlu dievaluasi ulang untuk setiap baris luar.

UPDATE table1
SET    table2Id = (SELECT TOP 1 table2Id
                   FROM   table2
                   ORDER  BY Newid(),
                             table1.table1Id)

Bagi saya yang memberikan rencana ini tanpa kumparan.

Penting untuk menghubungkan bidang unik dari table1 namun demikian bahkan jika spool ditambahkan, spool harus selalu di-rebound daripada di-replay (memutar ulang hasil terakhir) karena nilai korelasi akan berbeda untuk setiap baris.

Jika tabelnya besar, ini akan lambat karena pekerjaan yang diperlukan adalah produk dari dua baris tabel (untuk setiap baris di table1 perlu melakukan pemindaian penuh table2 )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah kolom TimeStamp unik?

  2. Bagaimana OBJECTPROPERTY() Bekerja di SQL Server

  3. Sisipkan Pemicu pembaruan cara menentukan apakah memasukkan atau memperbarui

  4. Dampak pada aplikasi dalam migrasi dari sql server 2005 ke 2008

  5. PHP 5.3 tidak mengenali Native Client untuk terhubung ke MS SQL