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

Cara paling efisien untuk memindahkan baris tabel dari satu tabel ke tabel lainnya

Solusi lain adalah dengan menggunakan beberapa skema dan memainkan switch-a-roo. Saya hanya lebih suka metode ini karena saya biasa melakukan trik ini dalam pekerjaan, dan pesan peringatan tentang mengganti nama objek (yang tidak dapat ditekan) mengisi log riwayat saya. Pada dasarnya Anda memerlukan dua skema tambahan (satu untuk menyimpan salinan tabel sementara, dan satu lagi untuk menyimpan salinan yang di-cache).

CREATE SCHEMA cache AUTHORIZATION dbo;
CREATE SCHEMA hold  AUTHORIZATION dbo;

Sekarang, buat tiruan tabel dalam skema cache:

SELECT * INTO cache.table FROM dbo.table WHERE 1 = 0;
-- then create any indexes etc.

Sekarang saatnya untuk menyegarkan data:

-- step 1:
TRUNCATE TABLE cache.table;
-- (if you need to maintain FKs you may need to delete)
INSERT INTO cache.table SELECT ...

-- step 2:
-- this transaction will be almost instantaneous, 
-- since it is a metadata operation only: 

BEGIN TRANSACTION;
  ALTER SCHEMA hold  TRANSFER dbo.table;
  ALTER SCHEMA dbo   TRANSFER cache.table;
  ALTER SCHEMA cache TRANSFER hold.table;
COMMIT TRANSACTION;

Secara teoritis, Anda dapat memindahkan transfer terakhir dari transaksi, karena pengguna bisa mulai menanyakan salinan baru dbo.table setelah transfer kedua, tetapi seperti yang saya katakan, ini hampir seketika jadi saya akan terkejut jika Anda melihat perbedaan dalam konkurensi.

Anda juga dapat secara opsional memotong cache.table lagi di sini, tetapi saya selalu membuatnya tetap terisi sehingga saya dapat membandingkan perubahan data atau memecahkan masalah jika ada yang tidak beres. Bergantung pada berapa lama -- langkah 1 diperlukan, mungkin lebih cepat melakukan transfer secara terbalik daripada mengisi ulang dari awal.

Seperti mengubah nama, Anda bisa mendapatkan hal-hal miring dari proses ini, seperti statistik hilang saat mereka bergerak dengan tabel yang sebenarnya, mereka tidak menempel dengan nama. Dan seperti mengganti nama, Anda ingin menguji ini dan Anda mungkin ingin bermain-main dengan level isolasi, mis. RCSI untuk mengakses tabel pelaporan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi 'datetime2' menjadi 'date' di SQL Server (Contoh T-SQL)

  2. Ganti nama Akun SA di SQL Server (Contoh T-SQL)

  3. T-SQL:pisahkan dan gabungkan nilai yang dipisahkan koma

  4. Pivot dinamis SQL Server dengan banyak kolom

  5. Tidak dapat mengimpor data dari excel 2003 ke database menggunakan fungsi openrowset