SQL Server에서 상위 100 개의 레코드를 업데이트하는 방법
SQL Server에서 상위 100 개의 레코드를 업데이트하고 싶습니다. 나는 테이블에있는 T1
필드 F1
와 F2
. T1
200 개의 레코드가 있습니다. F1
상위 100 개 레코드 의 필드 를 업데이트하고 싶습니다 . TOP 100
SQL Server를 기반으로 업데이트하려면 어떻게 해야합니까?
UPDATE 문에는 괄호가 필요합니다.
update top (100) table1 set field1 = 1
없이 ORDER BY
전체 아이디어는 TOP
많은 이해가되지 않습니다. top의 개념이 의미가 있으려면 어느 방향이 "위"인지, "아래"인지에 대한 일관된 정의가 필요합니다.
그럼에도 불구하고 SQL Server는이를 허용하지만 결정적인 결과를 보장하지는 않습니다 .
UPDATE TOP
허용 된 답변 의 구문은 ORDER BY
절을 지원하지 않지만 CTE 또는 파생 테이블을 사용하여 다음과 같이 원하는 정렬 순서를 정의하여 결정 론적 의미를 얻을 수 있습니다.
;WITH CTE AS
(
SELECT TOP 100 *
FROM T1
ORDER BY F2
)
UPDATE CTE SET F1='foo'
나와 같은 사람들은 여전히 SQL Server 2000을 고수 SET ROWCOUNT {number};
하고 UPDATE
쿼리 전에 사용할 수 있습니다.
SET ROWCOUNT 100;
UPDATE Table SET ..;
SET ROWCOUNT 0;
업데이트를 100 행으로 제한합니다
SQL 2005부터는 더 이상 사용되지 않지만 SQL 2017에서는 여전히 작동합니다. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
update tb set f1=1 where id in (select top 100 id from tb where f1=0)
더 멋진 점은 인라인 테이블 반환 함수를 사용하여 업데이트 할 (및 비아 TOP
) 행 을 선택할 수 있다는 것 입니다. 그건:
UPDATE MyTable
SET Column1=@Value1
FROM tvfSelectLatestRowOfMyTableMatchingCriteria(@Param1,@Param2,@Param3)
테이블 반환 함수의 경우 다음과 같이 업데이트 할 행을 선택하는 것이 좋습니다.
CREATE FUNCTION tvfSelectLatestRowOfMyTableMatchingCriteria
(
@Param1 INT,
@Param2 INT,
@Param3 INT
)
RETURNS TABLE AS RETURN
(
SELECT TOP(1) MyTable.*
FROM MyTable
JOIN MyOtherTable
ON ...
JOIN WhoKnowsWhatElse
ON ...
WHERE MyTable.SomeColumn=@Param1 AND ...
ORDER BY MyTable.SomeDate DESC
)
... 그리고 (내 겸손한 견해로는) 선택된 상위 행만 결정 론적으로 업데이트하면서 동시에 UPDATE
명령문 의 구문을 단순화하는 진정한 힘이 있습니다.
시험:
UPDATE Dispatch_Post
SET isSync = 1
WHERE ChallanNo
IN (SELECT TOP 1000 ChallanNo FROM dbo.Dispatch_Post ORDER BY
CreatedDate DESC)
별명과 조인을 사용하여 select에서 업데이트 할 수도 있습니다.
UPDATE TOP (500) T
SET T.SomeColumn = 'Value'
FROM SomeTable T
INNER JOIN OtherTable O ON O.OtherTableFK = T.SomeTablePK
WHERE T.SomeOtherColumn = 1
참고 URL : https://stackoverflow.com/questions/1198364/how-can-i-update-top-100-records-in-sql-server
'Programming' 카테고리의 다른 글
Java에서 상수를 구현하는 가장 좋은 방법은 무엇입니까? (0) | 2020.02.26 |
---|---|
IDEA에서 Gradle의 집을 정의하는 방법은 무엇입니까? (0) | 2020.02.26 |
단위 테스트와 기능 테스트 (0) | 2020.02.26 |
Bash에서 배열의 요소를 어떻게 결합 할 수 있습니까? (0) | 2020.02.26 |
마이크로 초 구성 요소없이 문자열로 파이썬 날짜 시간 (0) | 2020.02.26 |