如何更新前100条记录中的SQL Server(how can I Update top 100 r

2019-06-17 17:59发布

我想更新前100个记录在SQL Server中。 我有一个表T1与场F1F2T1有200条记录。 我想更新F1前100场的记录。 我怎样才能更新基于TOP 100在SQL Server?

Answer 1:

请注意,括号所需要的UPDATE语句:

update top (100) table1 set field1 = 1


Answer 2:

如果没有一个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'


Answer 3:

对于那些喜欢我还是坚持了SQL Server 2000中, SET ROWCOUNT {number}; 可在之前使用UPDATE查询

SET ROWCOUNT 100;
UPDATE Table SET ..;
SET ROWCOUNT 0;

将限制更新100行

它至少自2005年以来SQL被弃用,但SQL 2017的它仍然有效。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017



Answer 4:

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


Answer 5:

什么是更酷的是,你可以使用内联表值函数选择哪些(以及多少通过事实TOP )行(S)进行更新。 那是:

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语句。



Answer 6:

尝试:

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


文章来源: how can I Update top 100 records in sql server