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
는 테이블의 기본 키 필드 이름입니다.