我想更新SQL Server的前100条记录。我有一个包含字段F1和F2的表T1。T1有200条记录。我想更新排名前100的F1赛场。如何根据SQL Server的TOP 100进行更新?
当前回答
如果没有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'
其他回答
如果没有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'
update tb set f1=1 where id in (select top 100 id from tb where f1=0)
TOP限定符还可以用于限制手动错误更新的行数。
考虑下面的UPDATE语法。
UPDATE TOP (1) table1 SET column1 = 0 WHERE column_pk = '123'
如果没有TOP子句,如果您正在进行手动更新,并且您的鼠标文本选择仅从“update”选择到“WHERE”子句之前,则更新将应用于所有行。使用TOP子句,只有一行会得到不需要的更新。
TOP约束可以限制丢失或不正确的WHERE子句或ORDER BY子句的损害。当知道只需要更新一行或几行时,这将很有帮助。
这段代码可以完成它的工作
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;
对于那些像我一样仍然停留在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
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的