Saya ingin memperbarui dua tabel sekaligus. Bagaimana saya melakukannya di SQL Server 2005?
UPDATE
Table1,
Table2
SET
Table1.LastName='DR. XXXXXX',
Table2.WAprrs='start,stop'
FROM
Table1 T1,
Table2 T2
WHERE
T1.id = T2.id
AND
T1.id = '010008'
sql
sql-server
sql-server-2005
tsql
Jango
sumber
sumber
Jawaban:
Anda tidak dapat memperbarui beberapa tabel dalam satu pernyataan, namun, Anda dapat menggunakan transaksi untuk memastikan bahwa dua
UPDATE
pernyataan diperlakukan secara atomis. Anda juga dapat mengelompokkannya untuk menghindari perjalanan pulang pergi.sumber
Anda tidak bisa memperbarui dua tabel sekaligus, tetapi Anda bisa menautkan pembaruan ke dalam sisipan menggunakan
OUTPUT INTO
, dan Anda bisa menggunakan output ini sebagai gabungan untuk pembaruan kedua:Saya mengubah
WHERE
kondisi contoh Anda menjadi beberapa bidang selainid
. Jika itu yangid
Anda tidak perlu suka iniOUTPUT
, Anda bisa hanyaUPDATE
meja kedua untuk hal yang samaid='010008'
.sumber
T1.field
seharusnyaTable1.field
?Maaf, afaik, Anda tidak bisa melakukan itu. Untuk memperbarui atribut dalam dua tabel berbeda, Anda perlu menjalankan dua pernyataan terpisah. Tetapi mereka bisa dalam batch (satu set SQL dikirim ke server dalam satu perjalanan pulang pergi)
sumber
Jawaban singkatnya adalah tidak. Meskipun Anda dapat memasukkan beberapa tabel dalam
from
klausa pernyataan pembaruan, Anda hanya dapat menentukan satu tabel setelahupdate
kata kunci. Bahkan jika Anda menulis tampilan "yang dapat diupdate" (yang hanyalah tampilan yang mengikuti batasan tertentu), pembaruan seperti ini akan gagal. Berikut adalah klip yang relevan dari dokumentasi MSDN (penekanan ada pada saya).UPDATE (Transact-SQL)
BUAT LIHAT (Transact-SQL)
Namun, dalam semua kejujuran, Anda harus mempertimbangkan untuk menggunakan dua pernyataan SQL yang berbeda dalam suatu transaksi sesuai dengan contoh LBushkin.
UPDATE: Pernyataan asli saya bahwa Anda dapat memperbarui beberapa tabel dalam tampilan yang dapat diupdate salah. Pada SQL Server 2005 & 2012, itu akan menghasilkan kesalahan berikut. Saya telah mengoreksi jawaban saya untuk mencerminkan hal ini.
sumber
INSTEAD OF Specifies that the DML trigger is executed instead of the triggering SQL statement, therefore, overriding the actions of the triggering statements. INSTEAD OF cannot be specified for DDL or logon triggers.
Ini berfungsi untuk MySQL dan benar-benar hanya transaksi implisit tetapi harus seperti ini:
jika Anda melakukan pembaruan untuk multi tabel yang membutuhkan multi pernyataan ... yang mungkin terjadi jika Anda memperbarui satu, maka yang lain berdasarkan kondisi lain ... Anda harus menggunakan transaksi.
sumber
Anda harus menempatkan dua laporan pembaruan dalam transaksi
sumber
Anda bisa menulis pernyataan pembaruan untuk satu tabel dan kemudian memicu pada pembaruan tabel pertama , yang memperbarui tabel kedua
sumber
Dari sudut pandang saya, Anda dapat melakukan ini, pembaruan satu dari dua tabel di SQL SERVER:
sumber
Ini sesederhana permintaan yang ditunjukkan di bawah ini.
sumber