SQL 서버에서 상위 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
말이 안 돼요톱의 개념이 의미를 가지려면 어느 방향이 "위"인지, 어느 방향이 "아래"인지에 대한 일관된 정의가 필요합니다.
그럼에도 불구하고 SQL Server는 이를 허용하지만 결정적인 결과를 보장하지는 않습니다.
그UPDATE TOP
승인된 답변의 구문은 다음 명령어를 지원하지 않습니다.ORDER BY
여기서 CTE 또는 파생 테이블을 사용하여 다음과 같이 원하는 정렬 순서를 정의함으로써 결정론적 의미를 얻을 수 있습니다.
;WITH CTE AS
(
SELECT TOP 100 *
FROM T1
ORDER BY F2
)
UPDATE CTE SET F1='foo'
update tb set f1=1 where id in (select top 100 id from tb where f1=0)
아직 SQL Server 2000에 얽매여 있는 저 같은 분들을 위해SET ROWCOUNT {number};
전에 사용할 수 있습니다.UPDATE
질문하다
SET ROWCOUNT 100;
UPDATE Table SET ..;
SET ROWCOUNT 0;
업데이트를 100 행으로 제한합니다.
적어도 SQL 2005 이후 권장되지 않았지만 SQL 2017 현재도 여전히 작동합니다.https://learn.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
더욱 쿨한 것은 인라인 테이블 값 함수를 사용하여 어떤 (및 몇 개의 v-values)를 선택할 수 있다는 사실입니다.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
진술.
에일리어스 및 Join을 사용하여 선택 항목을 업데이트할 수도 있습니다.
UPDATE TOP (500) T
SET T.SomeColumn = 'Value'
FROM SomeTable T
INNER JOIN OtherTable O ON O.OtherTableFK = T.SomeTablePK
WHERE T.SomeOtherColumn = 1
이 코드 조각은 제 기능을 할 수 있다
UPDATE TOP (100) table_name set column_name = value;
마지막 100개의 레코드를 표시하려면 필요에 따라 이 레코드를 사용할 수 있습니다.
With OrnekWith
as
(
Select Top(100) * from table_name Order By ID desc
)
Update table_name Set column_name = value;
시험:
UPDATE Dispatch_Post
SET isSync = 1
WHERE ChallanNo
IN (SELECT TOP 1000 ChallanNo FROM dbo.Dispatch_Post ORDER BY
CreatedDate DESC)
TOP 한정자를 사용하여 수동으로 잘못 업데이트한 행 수를 제한할 수도 있습니다.
다음 UPDATE 구문을 검토합니다.
UPDATE TOP (1) table1 SET column1 = 0 WHERE column_pk = '123'
TOP 절이 없는 경우 수동 업데이트를 수행할 때 마우스 텍스트 선택이 "UPDATE"에서 "WHERE" 절 바로 앞까지만 선택되면 업데이트가 모든 행에 적용됩니다.TOP 구를 사용하면 1개의 행만 불필요한 업데이트를 받습니다.
TOP 제약 조건은 누락되거나 잘못된 WHERE 절 또는 ORDER BY 절의 손상을 제한할 수 있습니다.이것은 1개 또는 몇 개의 행만 업데이트해야 한다는 것을 알고 있는 경우에 도움이 됩니다.
언급URL : https://stackoverflow.com/questions/1198364/how-can-i-update-top-100-records-in-sql-server
'source' 카테고리의 다른 글
ID 열 값을 프로그래밍 방식으로 변경하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
---|---|
베스트 프랙티스가 없는 경우 SQL Server 삽입 (0) | 2023.04.07 |
스크립트 또는 스토어드 프로시저에서 일회용 기능을 만들 수 있습니까? (0) | 2023.04.07 |
SQL Server 2005/2008 요일 가져오기 (0) | 2023.04.07 |
2초 동안 어떻게 기다리죠? (0) | 2023.04.07 |