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

beq87vna  于 2022-12-22  发布在  SQL Server
关注(0)|答案(9)|浏览(466)

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

6bc51xsx

6bc51xsx1#

注意,UPDATE语句需要括号:

update top (100) table1 set field1 = 1
tzdcorbm

tzdcorbm2#

没有ORDER BYTOP的整个概念就没有多大意义,你需要有一个一致的定义,哪个方向是“上”,哪个方向是“下”,顶部的概念才有意义。
尽管如此,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'
6pp0gazn

6pp0gazn3#

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

6yjfywim4#

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

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

kpbwa7wx

kpbwa7wx5#

更酷的是,您可以使用内联表值函数来选择要更新哪些行(以及通过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语句的语法,这才是真正的强大之处。

flmtquvp

flmtquvp6#

您还可以使用别名和联接从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
cbeh67ev

cbeh67ev7#

试试看:

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

pkwftd7m8#

这段代码可以完成它的工作

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;
gg58donl

gg58donl9#

TOP限定符也可用于限制手动更新错误的行数。
请考虑以下UPDATE语法。

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

如果不使用TOP子句,则在执行手动更新时,如果鼠标文本选择仅从“UPDATE”到“WHERE”子句之前,则更新将应用于所有行。如果使用TOP子句,则只有一行将获得不需要的更新。
TOP约束可以限制WHERE子句或ORDER BY子句丢失或不正确所造成的损害。当已知只应更新一行或几行时,这会很有帮助。

相关问题