복붙노트

[SQL] 어떻게 내가 업데이트 위로에게 SQL 서버 (100) 기록을 할 수

SQL

어떻게 내가 업데이트 위로에게 SQL 서버 (100) 기록을 할 수

나는 SQL Server에서 100 레코드를 업데이트 할 수 있습니다. I는 필드 F1 및 F2와 테이블 T1을 갖는다. T1 (200 개) 기록을 가지고있다. 나는 100 기록에 F1 필드를 업데이트 할. 어떻게는 SQL Server의 TOP 100을 기준으로 업데이트 할 수 있습니까?

해결법

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

    1.참고 괄호는 UPDATE 문에 필요합니다 :

    참고 괄호는 UPDATE 문에 필요합니다 :

    update top (100) table1 set field1 = 1
    
  2. ==============================

    2.많은 이해가되지 않습니다 TOP의 모든 생각하여 ORDER없이. 당신은 방향이 상위의 개념 "다운"의미가있을 것입니다 "최대"이고있는 일관된 정의가 있어야합니다.

    많은 이해가되지 않습니다 TOP의 모든 생각하여 ORDER없이. 당신은 방향이 상위의 개념 "다운"의미가있을 것입니다 "최대"이고있는 일관된 정의가 있어야합니다.

    그럼에도 불구하고 SQL Server는 할 수 있지만, 결정 결과를 보장하지 않습니다.

    허용 대답에 업데이트 TOP 구문은 ORDER BY 절을 지원하지 않습니다하지만 아래와 같이 원하는 정렬 순서를 정의하는 CTE 또는 파생 테이블을 사용하여 여기에 결정적 의미를 얻을 수 있습니다.

    ;WITH CTE AS 
    ( 
    SELECT TOP 100 * 
    FROM T1 
    ORDER BY F2 
    ) 
    UPDATE CTE SET F1='foo'
    
  3. ==============================

    3.여전히 SQL 서버 2000와 함께 붙어 나 같은 사람들을 위해, SET ROWCOUNT {수}; 업데이트 쿼리하기 전에 사용할 수 있습니다

    여전히 SQL 서버 2000와 함께 붙어 나 같은 사람들을 위해, SET ROWCOUNT {수}; 업데이트 쿼리하기 전에 사용할 수 있습니다

    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

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

    4.

    update tb set  f1=1 where id in (select top 100 id from tb where f1=0)
    
  5. ==============================

    5.어떤 경우에도 쿨러 것은 당신이하는 (그리고 얼마나 많은 TOP 통해) 행 (들) 업데이트를 선택 인라인 테이블 반환 함수를 사용할 수 있다는 사실이다. 그건:

    어떤 경우에도 쿨러 것은 당신이하는 (그리고 얼마나 많은 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 문의 구문을 단순화하는 동시에 단지 최고 선택한 행을 업데이트하는 진정한 힘.

  6. ==============================

    6.시험:

    시험:

    UPDATE Dispatch_Post
    SET isSync = 1
    WHERE ChallanNo 
    IN (SELECT TOP 1000 ChallanNo FROM dbo.Dispatch_Post ORDER BY 
    CreatedDate DESC)
    
  7. ==============================

    7.또한 별칭과 조인을 사용하여 선택에서 업데이트 할 수 있습니다 :

    또한 별칭과 조인을 사용하여 선택에서 업데이트 할 수 있습니다 :

    UPDATE  TOP (500) T
    SET     T.SomeColumn = 'Value'
    FROM    SomeTable T
            INNER JOIN OtherTable O ON O.OtherTableFK = T.SomeTablePK
    WHERE   T.SomeOtherColumn = 1
    
  8. from https://stackoverflow.com/questions/1198364/how-can-i-update-top-100-records-in-sql-server by cc-by-sa and MIT license