我有一个名为 mytable 的表,其中包含许多列。
我想要做的是更新该表中的一列,其中 2 个列匹配但仅适用于与条件匹配的前 400 条记录。
例子:
列
Name Ref ID Text
当 ref = 555 和 id = 7 时,我想用“匹配”一词更新名为 Text 的列。
我知道将有大约 800 条符合条件的记录,但我只想更新前 400条。
有人可以帮忙吗?
问候,威尔。
我有一个名为 mytable 的表,其中包含许多列。
我想要做的是更新该表中的一列,其中 2 个列匹配但仅适用于与条件匹配的前 400 条记录。
例子:
列
Name Ref ID Text
当 ref = 555 和 id = 7 时,我想用“匹配”一词更新名为 Text 的列。
我知道将有大约 800 条符合条件的记录,但我只想更新前 400条。
有人可以帮忙吗?
问候,威尔。
一种简单的方法是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
您可以使用 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';
您可以加入要自行更新的表:
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
如果您需要在第二行插入更改更新关键字来插入,我已经给出了更新触发器
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;