SQL Server에 테이블이 있습니다. 여기에서 상위 1000 개 행을 삭제하고 싶습니다. 그러나 이것을 시도했지만 상위 1000 행을 삭제하는 대신 테이블의 모든 행을 삭제했습니다.
다음은 코드입니다.
delete from [mytab]
select top 1000
a1,a2,a3
from [mytab]
8
당신은 메이크업의 TOP 의미에 의해 주문을 필요로하십시오이다 @Martin 스미스의 대답은 참조 만 이이 다섯 중 하나. 나는 때때로 절망
—
GBN
당신은 삭제 하시겠습니까 모든 1000 개 행을? 그냥 무작위로 선택 했나요? 또는 예를 들어 가장 오래된 상위 1000 개 행?
—
Nick Chammas 2012 년
delete from [mytab]
하나의 문이고 select top ...
다른 문 이기 때문에 모든 테이블을 삭제했습니다 .
TOP을 위해 주문할 필요가 없습니다. TOP을하는 이유에 따라 다릅니다. 1,000 만 개의 행을 제거해야하고 1GB의 로그 공간을 사용할 수있는 경우 Delete TOP (10000) From dbo.myTable (select 절 포함)을 사용하고 삭제할 행이 더 이상 없을 때까지 계속 실행합니다. 자의적이라면 누가 신경 쓰겠습니까? 정렬하면 쿼리 속도가 느려질뿐입니다.
—
tvanharp
나는 이것이 고대의 질문이라는 것을 알고 있지만 사람들이 @gbn의 코멘트를 고려하는 것이 중요 하다고 생각합니다 . 그의 의견은 내 주어진 상황에 적용되지 않지만 (LOCK 문제를 일으키지 않고 레코드 블록을 삭제하려고 시도하지만 삭제 순서는 신경 쓰지 않음) 귀하의 상황에 적용될 가능성이 큽니다. ORDER BY 절이 포함되지 않은 아래 답변을 맹목적으로 활용하기 전에이를 고려하십시오.
—
Andrew Steitz 2016-08-22