SQL Serverにテーブルがあります。上位1000行を削除したいと思います。ただし、これを試しましたが、上位1000行を削除するだけでなく、テーブル内のすべての行を削除しました。
これがコードです:
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
8
TOPを意味のあるものにするには、ORDER BYが必要です。@ Martin Smithの回答を参照してください。これは、5つのうちの1つだけです。私は時々絶望します
—
gbn '21 / 01/12
削除したいですか任意の 1000行を?ランダムに選択しただけですか?または、たとえば、最も古い1000個の最も古い行?
—
Nick Chammas
delete from [mytab]
は1つのステートメントであり、select top ...
別のステートメントであるため、すべてのテーブルを削除しました。
TOPを注文する必要はありません。TOPを行う理由によって異なります。1,000万行を削除する必要があり、1 GBのログ領域を利用できる場合は、(select句を使用して)Delete TOP(10000)From dbo.myTableを使用し、削除する行がなくなるまで実行し続けます。それが恣意的であるかどうかは気にしない。並べ替えはクエリの速度を低下させるだけです。
—
tvanharp
これは古くからの質問であることはわかっていますが(SO年では)、@ gbnのコメントを人々が検討することが重要だと思います。彼のコメントは私の与えられた状況には当てはまりませんが(LOCKの問題を引き起こさずにレコードのブロックを削除しようとしますが、削除される順序にはあまり注意を払っていません)、あなたの状況に当てはまる可能性が高いです。ORDER BY句を含まない以下の回答を盲目的に利用する前に、それらを検討してください。
—
Andrew Steitz 2016