[sql] 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]
)


답변

SET ROWCOUNT 1000;

DELETE FROM [MyTable] WHERE .....


답변

빠릅니다. 시도 해봐:

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

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


답변