반응형
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 .....
반응형
'development' 카테고리의 다른 글
AngularJS 프로젝트를 실행하기 위해 localhost 서버를 만드는 방법 (0) | 2020.08.22 |
---|---|
crontab 파일을 열기 위해 편집기를 지정하는 방법은 무엇입니까? (0) | 2020.08.22 |
도트 문자 '.' (0) | 2020.08.22 |
Android appcompat v7 21 라이브러리에서 DrawerArrowToggle을 구현하는 방법 (0) | 2020.08.22 |
Android ViewPager-왼쪽과 오른쪽에 페이지 미리보기 표시 (0) | 2020.08.22 |