Saya memiliki tabel di SQL Server. Saya ingin menghapus 1000 baris teratas darinya. Namun, saya mencoba ini, tetapi saya alih-alih hanya menghapus 1000 baris teratas, itu menghapus semua baris dalam tabel.
Ini kodenya:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
sql
sql-server
sql-delete
edgarmtze.dll
sumber
sumber
delete from [mytab]
satu pernyataan, danselect top ...
yang lainnya.Jawaban:
Kode yang Anda coba sebenarnya adalah dua pernyataan. A
DELETE
diikuti oleh aSELECT
.Anda tidak mendefinisikan
TOP
seperti yang diperintahkan oleh apa.Untuk kriteria pengurutan tertentu, menghapus dari CTE atau ekspresi tabel serupa adalah cara yang paling efisien.
sumber
DELETE TOP (1000) FROM table ORDER BY column
, baca ini : "Baris yang direferensikan dalam ekspresi TOP yang digunakan dengan INSERT, UPDATE, MERGE, atau DELETE tidak diatur dalam urutan apa pun."WITH
mencegah keluhan dari orang-orang yang belum melakukannya.Mungkin lebih baik untuk sql2005 + untuk digunakan:
Untuk Sql2000:
TAPI
Jika Anda ingin menghapus tertentu subset baris bukan bagian sewenang-wenang, Anda harus secara eksplisit menentukan untuk subquery:
Terima kasih tp @gbn karena telah menyebutkan dan menuntut jawaban yang lebih jelas dan tepat.
sumber
Seperti yang didefinisikan pada tautan di bawah, Anda dapat menghapus secara langsung
http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx
sumber
sumber
sumber
Cepat. Cobalah:
Ganti
YourTABLE
dengan nama tabel,XX
dengan angka, misalnya 1000,pk
adalah nama bidang kunci utama tabel Anda.sumber