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

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

542912 次浏览

注意,括号对于UPDATE语句是必需的:

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

如果没有ORDER BYTOP的整个思想就没有多大意义。你需要对哪个方向是“向上”,哪个方向是“向下”有一个一致的定义,这样顶部的概念才有意义。

尽管如此,SQL Server允许它并不能保证一个确定的结果

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

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

对于那些像我一样仍然坚持使用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 < / p >

更酷的是,你可以使用内联表值函数来选择要更新哪些行(以及通过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语句语法的同时,只确定性地更新顶部选定的行,这是(我的拙见)真正的力量。

试一试:

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

你也可以使用别名和join从select中更新:

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;

TOP限定符还可以用于限制手动错误更新的行数。

考虑下面的UPDATE语法。

UPDATE TOP (1) table1 SET column1 = 0 WHERE column_pk = '123'

如果没有TOP子句,如果您正在进行手动更新,并且您的鼠标文本选择只从" update "就在“WHERE"子句,则更新应用于所有行。使用TOP子句,只有一行会得到不需要的更新。

TOP约束可以限制丢失或不正确的WHERE子句或ORDER BY子句的损害。当知道只需要更新一行或几行时,这将很有帮助。