我有一个名为mytable的表,有许多列。
我想要做的是更新该列表中的2个列相匹配的列,但只匹配符合条件的前400条记录。SQL Server 2008 - 仅更新表中的特定行数
实施例:
列
Name Ref ID Text
当REF = 555和id = 7我想更新调用 '匹配' 字文本的列。
我知道会有大约800条符合条件的记录,但我只想更新前400条。
任何人都可以帮忙吗?
Regards, 请问。
我有一个名为mytable的表,有许多列。
我想要做的是更新该列表中的2个列相匹配的列,但只匹配符合条件的前400条记录。SQL Server 2008 - 仅更新表中的特定行数
实施例:
列
Name Ref ID Text
当REF = 555和id = 7我想更新调用 '匹配' 字文本的列。
我知道会有大约800条符合条件的记录,但我只想更新前400条。
任何人都可以帮忙吗?
Regards, 请问。
在CTE
一个简单的方法是使用ROW_NUMBER
,如:
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
您可以使用一个CTE来选择TOP 400
行有一个ref=555
和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';
我已经给触发更新,如果你需要在第二行插入变化更新关键字插入
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;
你可以加入你想自己来更新表:伟大的工作
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
假设'ID'为主键,如果'ref'和'id'是一个复合主键或者它们不是唯一的呢? – 2013-04-04 11:56:24
那么,如果是这样的话,那么有必要指定前400个是什么,所以是的,我推测这个ID在该表中是唯一的。 – DrCopyPaste 2013-04-04 12:05:53
添,非常感谢你和其他人的帮助。非常感激。 – Will 2013-04-04 12:17:43