development

Sql Server 2008을 사용하여 테이블에서 상위 1000 개 행을 삭제하는 방법은 무엇입니까?

big-blog 2020. 8. 22. 12:03
반응형

Sql Server 2008을 사용하여 테이블에서 상위 1000 개 행을 삭제하는 방법은 무엇입니까?


SQL Server에 테이블이 있습니다. 여기에서 상위 1000 개 행을 삭제하고 싶습니다. 그러나 이것을 시도했지만 상위 1000 행을 삭제하는 대신 테이블의 모든 행을 삭제했습니다.

다음은 코드입니다.

delete from [mytab] 
select top 1000 
a1,a2,a3
from [mytab]

시도한 코드는 사실 두 개의 진술입니다. A DELETE다음에 SELECT.

당신은 TOP무엇에 의해 주문 된 것으로 정의하지 않습니다 .

특정 순서 기준의 경우 CTE 또는 유사한 테이블 식에서 삭제하는 것이 가장 효율적인 방법입니다.

;WITH CTE AS
(
SELECT TOP 1000 *
FROM [mytab]
ORDER BY a1
)
DELETE FROM CTE

sql2005 +가 다음을 사용하는 것이 더 나을 수 있습니다.

DELETE TOP (1000)
FROM [MyTab]
WHERE YourConditions

SQL2000의 경우 :

DELETE FROM [MyTab]
WHERE YourIdField IN 
(
  SELECT TOP 1000 
    YourIdField 
  FROM [MyTab]
  WHERE YourConditions
)

그러나

임의의 하위 집합 대신 특정 행 하위 집합 을 삭제하려면 하위 쿼리 순서를 명시 적으로 지정해야합니다.

DELETE FROM [MyTab]
WHERE YourIdField IN 
(
  SELECT TOP 1000 
    YourIdField 
  FROM [MyTab]
  WHERE YourConditions
  ORDER BY ExplicitSortOrder
)

더 명확하고 정확한 답변을 언급하고 요구해 주신 tp @gbn에게 감사드립니다.


아래 링크에 정의 된대로 간단하게 삭제할 수 있습니다.

USE AdventureWorks2008R2;
GO
DELETE TOP (20) 
FROM Purchasing.PurchaseOrderDetail
WHERE DueDate < '20020701';
GO

http://technet.microsoft.com/en-us/library/ms175486(v=sql.105).aspx


delete from [mytab]
where [mytab].primarykeyid in
(
select top 1000 primarykeyid
from [mytab]
)

빠릅니다. 시도 해봐:

DELETE FROM YourTABLE
FROM (SELECT TOP XX PK FROM YourTABLE) tbl
WHERE YourTABLE.PK = tbl.PK

YourTABLE테이블 이름으로 바꾸기 ( XX예 : 1000) pk는 테이블의 기본 키 필드 이름입니다.


SET ROWCOUNT 1000;

DELETE FROM [MyTable] WHERE .....

참고 URL : https://stackoverflow.com/questions/8955897/how-to-delete-the-top-1000-rows-from-a-table-using-sql-server-2008

반응형