首页 文章

如何更新sql server中的前100条记录

提问于
浏览
345

我想更新SQL Server中的前100条记录 . 我有一个表 T1 ,其字段为 F1F2 . T1 有200条记录 . 我想更新前100条记录中的 F1 字段 . 如何在SQL Server中基于 TOP 100 进行更新?

6 回答

  • 4

    对于像我这样仍然坚持使用SQL Server 2000的人,可以在 UPDATE 查询之前使用 SET ROWCOUNT {number};

    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

  • 14
    update tb set  f1=1 where id in (select top 100 id from tb where f1=0)
    
  • 9

    没有 ORDER BY __792817_的整个想法没有多大意义 . 你需要有一个一致的定义,哪个方向是"up",哪个是"down",因为top的概念是有意义的 .

    尽管如此,SQL Server允许它,但doesn't guarantee a deterministic result .

    接受的答案中的 UPDATE TOP 语法不支持 ORDER BY 子句,但可以通过使用CTE或派生表来定义所需的排序顺序,从而获得确定性语义,如下所示 .

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

    注意,UPDATE语句需要括号:

    update top (100) table1 set field1 = 1
    
  • 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 语句的语法的真正力量 .

  • 277

    尝试:

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

相关问题