Sql 如何使用Select查询更新前20条记录

Sql 如何使用Select查询更新前20条记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何使用Select查询更新前20条记录 表1(表记录在for循环中)有60条记录。每次,我希望根据表column=“TEXT”获取前20条记录,然后使用column=“TEXT1”更新这20条记录 在那之后,我将选择接下来的20条记录(21-40条),并再次更新如上所述 我正在使用下面的查询,但它会在接下来的20条(21-40条)记录之后更新前20条记录。它将不起作用 Update tableName set Column = 'TEXT1' where column = 'TEXT' ;

如何使用Select查询更新前20条记录

表1(表记录在for循环中)有60条记录。每次,我希望根据表column=“TEXT”获取前20条记录,然后使用column=“TEXT1”更新这20条记录

在那之后,我将选择接下来的20条记录(21-40条),并再次更新如上所述

我正在使用下面的查询,但它会在接下来的20条(21-40条)记录之后更新前20条记录。它将不起作用

Update tableName set Column = 'TEXT1' where column = 'TEXT'  ;
或者如果需要有条件地更新

UPDATE tablename set column = case when column = 'TEXT' then 'Text1'
                                   else column = 'OtherText' then 'Text1Other'
                                   else column = 'StillOtherText' then 'Text1Other2' end
WHERE column in ('TEXT','OtherText','StillOtherText');
或者如果需要有条件地更新

UPDATE tablename set column = case when column = 'TEXT' then 'Text1'
                                   else column = 'OtherText' then 'Text1Other'
                                   else column = 'StillOtherText' then 'Text1Other2' end
WHERE column in ('TEXT','OtherText','StillOtherText');

一种方法是使用while循环检查是否存在“TEXT”。如果该检查返回true,则选择前20个主键作为update语句的一部分

WHILE EXISTS (SELECT * 
                FROM Table1 
               WHERE yourcolumn = 'TEXT')
BEGIN
UPDATE Table1
   SET yourcolumn = 'TEXT1'
 WHERE primarykey IN (
                       SELECT TOP 20 primarykey
                         FROM Table1
                        WHERE yourcolumn = 'TEXT'
                     )
END

一种方法是使用while循环检查是否存在“TEXT”。如果该检查返回true,则选择前20个主键作为update语句的一部分

WHILE EXISTS (SELECT * 
                FROM Table1 
               WHERE yourcolumn = 'TEXT')
BEGIN
UPDATE Table1
   SET yourcolumn = 'TEXT1'
 WHERE primarykey IN (
                       SELECT TOP 20 primarykey
                         FROM Table1
                        WHERE yourcolumn = 'TEXT'
                     )
END

为什么一次20个?你在这里处理数百万张唱片吗?通常,数据库在基于集合的操作上工作得最好。而在一条update语句中更新60条记录以显示“TEXT1”将更加高效。SQL Server的哪个版本?一些支持获取一些其他我们必须生成一个行号并使用它..“我正在使用下面的查询”。。您忘记添加查询。您可以使用CTE运行子查询/获取前20个结果,然后针对该结果运行更新。。。但这很容易被锁定……为什么一次锁定20个?你在这里处理数百万张唱片吗?通常,数据库在基于集合的操作上工作得最好。而在一条update语句中更新60条记录以显示“TEXT1”将更加高效。SQL Server的哪个版本?一些支持获取一些其他我们必须生成一个行号并使用它..“我正在使用下面的查询”。。您忘记添加查询。您可以使用CTE运行子查询/获取前20个结果,然后针对该结果运行更新。。。但这可能会导致锁定…这是一个好的解决方案:而不是循环,单个查询覆盖每个案例这是一个好的解决方案:而不是循环,单个查询涵盖了所有情况,我认为这可以通过检查更新查询的行数而不是执行执行完整表扫描的while exists来增强。我认为这可以通过检查更新查询的行数而不是执行执行完整表扫描的while exists来增强