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

Cara MEMPERBARUI dari SELECT di SQL Server

Dalam sebagian besar keadaan, pembaruan SQL dilakukan menggunakan referensi langsung ke tabel tertentu (UPDATE books SET books.title = 'The Hobbit' WHERE books.id = 1 ). Namun, terkadang, mungkin terbukti bermanfaat untuk mengubah isi tabel secara tidak langsung , dengan menggunakan subset data yang diperoleh dari pernyataan kueri sekunder.

Melakukan UPDATE menggunakan SELECT sekunder pernyataan dapat dicapai dengan salah satu dari dua cara, terutama tergantung pada versi SQL Server yang Anda gunakan. Kami akan menjelajahi kedua opsi secara singkat sehingga Anda dapat menemukan yang terbaik untuk Anda.

Menggunakan INNER JOIN

Untuk semua instalasi SQL Server, metode paling dasar untuk melakukan tindakan ini adalah dengan menggunakan INNER JOIN , dimana nilai dalam kolom dari dua tabel yang berbeda dibandingkan satu sama lain.

UPDATE
  books
SET
  books.primary_author = authors.name
FROM
  books
INNER JOIN
  authors
ON
  books.author_id = authors.id
WHERE
  books.title = 'The Hobbit'

Dalam contoh di atas, kami UPDATING books.primary_author untuk mencocokkan authors.name untuk 'The Hobbit' dengan JOINING kedua tabel dalam kueri ke masing-masing, nilai yang cocok dari authors.id dan books.author_id .

Menggunakan MERGE untuk MEMPERBARUI dan INSERT Secara Bersamaan

Untuk SQL Server 2008 dan yang lebih baru, Microsoft memperkenalkan MERGE . yang sangat berguna operasi yang mirip dengan INNER JOIN di atas metode, tetapi MERGE mencoba melakukan keduanya UPDATE dan INSERT perintah bersama. Ini secara efektif menyinkronkan dua tabel berdasarkan kueri yang dilakukan, memperbarui, dan memasukkan catatan seperlunya agar keduanya cocok.

MERGE INTO
  books
USING
  authors
ON
  books.author_id = authors.id
WHEN MATCHED THEN
  UPDATE SET
    books.primary_author = authors.name
WHEN NOT MATCHED THEN
  INSERT
    (books.author_id, books.primary_author)
  VALUES
    (authors.id, authors.name)

Kueri lengkap saat menggunakan MERGE tentunya sedikit lebih kompleks daripada INNER JOIN dasar , tetapi begitu Anda memahami cara kerja operasi, Anda akan segera memahami betapa hebatnya kemampuan ini sebenarnya.

Beberapa baris pertama cukup jelas:

MERGE INTO
  books
USING
  authors
ON
  books.author_id = authors.id

Kami ingin MERGE INTO (UPDATE /INSERT ) books tabel dengan menggunakan authors sekunder tabel, dan kami mencocokkan keduanya berdasarkan books.author_id = authors.id yang sama perbandingan.

Dimana MERGE perintah yang berbeda ada pada logika percabangan berikut.

WHEN MATCHED THEN
  UPDATE SET
    books.primary_author = authors.name

Di sini kami meminta SQL untuk melakukan tindakan hanya ketika merekam MATCHED – ketika catatan yang ada ditemukan. Dalam hal ini, kami melakukan UPDATE standar seperti yang kita lakukan sebelumnya, menyetel books.primary_author bidang agar sama dengan authors.name lapangan.

Terakhir, jika kueri menemukan catatan komparatif yang cocok yang tidak ada, kami malah melakukan INSERT .

WHEN NOT MATCHED THEN
  INSERT
    (books.author_id, books.primary_author)
  VALUES
    (authors.id, authors.name)

Di sini kami hanya meminta SQL untuk INSERT rekor baru ke dalam books tabel dan meneruskan nilai untuk author_id dan primary_author bidang, diambil dari authors terkait catatan tabel.

Hasil akhir dari MERGE our kami pernyataannya adalah untuk setiap penulis di authors tabel, kami memverifikasi apakah buku yang sesuai ada di books . Jika catatan ditemukan, kami memastikan books.primary_author diatur menggunakan UPDATE , dan jika tidak ditemukan kecocokan, kami menambahkan catatan baru ke books .

Dengan itu, Anda harus memiliki pemahaman yang kuat tentang dua metode berbeda yang dapat digunakan untuk UPDATE catatan dalam SQL dengan menggunakan SELECT sekunder, komparatif pernyataan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. datetime ke totalminute dalam sql

  2. SQL Server:Kiat Berguna untuk Pemula

  3. Memecahkan Masalah saat Bekerja dengan Tanggal dan Waktu di SQL Server

  4. Bisakah SQL Server mengirim permintaan web?

  5. Cara membuat Batasan Kunci Asing Dengan ON UPDATE CASCADE di SQL Server - Tutorial SQL Server / TSQL Bagian 79