Saya ingin memperbarui 100 catatan teratas di SQL Server. Saya punya tabel T1
dengan bidang F1
dan F2
. T1
memiliki 200 catatan. Saya ingin memperbarui F1
bidang dalam 100 catatan teratas. Bagaimana saya bisa memperbarui berdasarkan pada TOP 100
SQL Server?
sql
sql-server
tsql
sql-update
Rajesh
sumber
sumber
order by
?Tanpa
ORDER BY
seluruh ideTOP
tidak masuk akal. Anda harus memiliki definisi yang konsisten tentang arah mana yang "naik" dan yang "turun" agar konsep top menjadi bermakna.Meskipun demikian SQL Server memperbolehkannya tetapi tidak menjamin hasil yang deterministik .
The
UPDATE TOP
sintaks dalam jawaban yang diterima tidak mendukungORDER BY
klausa namun ada kemungkinan untuk mendapatkan semantik deterministik sini dengan menggunakan CTE atau meja diturunkan untuk menentukan urutan yang diinginkan seperti di bawah ini.sumber
TOP
peluang, Anda harus menggunakannya denganORDER BY
apa yang Anda minati adalah seperti "paling" atau "paling tidak" dari sesuatu. Namun, dalam kasus lain, Anda mungkin hanya tertarik untuk mendapatkan satu catatan yang cocok. Sukai saya hari ini! Saya perlu memperbaiki masalah data (siklus) satu per satu. Seluruh proses perbaikan melibatkan skrip db, beberapa intervensi pengguna, dan beberapa operasi aplikasi. Kami tidak peduli catatan WHICH yang ditangani terlebih dahulu. Kami hanya peduli bahwa kami menangani mereka satu per satu.WHERE
klausa untuk mengecualikan catatan yang sebelumnya diproses. Pertanyaan sebagai jawaban tertulis dan diterima sangat tidak berarti. BTW: Untuk menggunakan tabel sebagai antrian, ini adalah tautan yang cukup bergunawhere
klausa untuk menghindari pemrosesan baris yang sama berulang kali.bagi yang seperti saya masih terjebak dengan SQL Server 2000,
SET ROWCOUNT {number};
dapat digunakan sebelumUPDATE
permintaanakan membatasi pembaruan hingga 100 baris
Sudah ditinggalkan setidaknya sejak SQL 2005, tetapi pada SQL 2017 masih berfungsi. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
sumber
sumber
Yang lebih keren adalah kenyataan bahwa Anda dapat menggunakan Fungsi Table-Valued inline untuk memilih
TOP
baris ( dan berapa banyak ) yang akan diperbarui. Itu adalah:Untuk fungsi bernilai tabel, Anda memiliki sesuatu yang menarik untuk memilih baris yang akan diperbarui seperti:
..., dan ada kebohongan (menurut pendapat saya yang sederhana) kekuatan sebenarnya dari memperbarui hanya baris yang dipilih paling deterministik sementara pada saat yang sama menyederhanakan sintaks
UPDATE
pernyataan.sumber
Mencoba:
sumber
Anda juga dapat memperbarui dari pilih menggunakan alias dan bergabung:
sumber