2

我有一个名为 mytable 的表,其中包含许多列。
我想要做的是更新该表中的一列,其中 2 个列匹配但仅适用于与条件匹配的前 400 条记录。

例子:

Name     Ref   ID    Text

当 ref = 555 和 id = 7 时,我想用“匹配”一词更新名为 Text 的列。
我知道将有大约 800 条符合条件的记录,但我只想更新前 400条。
有人可以帮忙吗?

问候,威尔。

4

4 回答 4

8

一种简单的方法是ROW_NUMBER在 a中使用CTE,例如:

WITH CTE AS
(
   SELECT rn = ROW_NUMBER() OVER (ORDER BY ref, id),
          ref, id, text
   FROM   MyTable
   WHERE  ref = 555 AND  id = 7
)
UPDATE CTE SET text = 'Matched' 
WHERE RN <= 400

演示

于 2013-04-04T11:36:06.617 回答
4

您可以使用 a CTE 选择TOP 400具有 aref=555和 an的行id=7

;with cte as
(
  select top 400 ref, id, text
  from yourtable
  where ref = 555
    and id = 7
  order by ref, id
)
update cte
set text = 'Matched';

请参阅带有演示的 SQL Fiddle

于 2013-04-04T11:35:55.180 回答
1

您可以加入要自行更新的表:

UPDATE MyTable
        SET Text = 'Matched'
    FROM MyTable
    INNER JOIN (
        SELECT TOP 400 ID FROM MyTable WHERE ref = 555 AND ID = 7 ORDER BY ID
    ) AS InnerMyTable ON MyTable.ID = InnerMyTable.ID
于 2013-04-04T11:46:50.767 回答
0

如果您需要在第二行插入更改更新关键字来插入,我已经给出了更新触发器

CREATE TRIGGER T
AFTER UPDATE ON MYTABLE
FOR EACH ROW BEGIN
WHERE (SELEC COUNT(*) FROM MYTABLE WHERE ref = 555 and id = 7) <= 400
BEGIN
UPDATE MYTABLE
SET TEXT = 'MATCHED'
WHERE REF = NEW.REF AND ID = NEW.ID;
END;
于 2013-04-04T11:40:18.887 回答