我想更新前100个记录在SQL Server中。 我有一个表T1
与场F1
和F2
。 T1
有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