복붙노트

[SQL] 어떻게 2008는 SQL Server를 사용하여 테이블에서 최고 1,000 행을 삭제하려면?

SQL

어떻게 2008는 SQL Server를 사용하여 테이블에서 최고 1,000 행을 삭제하려면?

나는 SQL Server의 테이블을 가지고있다. 나는 그것에서 최고 1000 행을 삭제하고 싶습니다. 그러나, 나는이 시도하지만 대신 상단 1000 행을 삭제하는이 테이블의 모든 행을 삭제.

여기에 코드입니다 :

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

해결법

  1. ==============================

    1.당신이 시도 코드는 실제로 두 문장이다. 는 SELECT 하였다 삭제한다.

    당신이 시도 코드는 실제로 두 문장이다. 는 SELECT 하였다 삭제한다.

    무엇으로 주문과 같이 TOP을 정의하지 않습니다.

    CTE를 또는 유사한 테이블 표현식에서 삭제 특정 주문 기준을 위해 가장 효율적인 방법입니다.

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

    2.SQL2005 +를 사용하는 더 좋을 수 있습니다 :

    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
    )
    

    덕분 언급하고 더 명확하고 정확한 답을 요구하기위한 @gbn TP.

  3. ==============================

    3.아래 링크에 정의 된대로, 당신은 정직하게 삭제할 수 있습니다

    아래 링크에 정의 된대로, 당신은 정직하게 삭제할 수 있습니다

    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

  4. ==============================

    4.

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

    5.

    SET ROWCOUNT 1000;
    
    DELETE FROM [MyTable] WHERE .....
    
  6. ==============================

    6.그것은 빠릅니다. 시도 해봐:

    그것은 빠릅니다. 시도 해봐:

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

    테이블 이름으로 YourTABLE 교체, 숫자가 XX, 예를 들어 1000, PK는 테이블의 기본 키 필드의 이름입니다.

  7. from https://stackoverflow.com/questions/8955897/how-to-delete-the-top-1000-rows-from-a-table-using-sql-server-2008 by cc-by-sa and MIT license