2013-04-04 29 views
1

我有一个名为mytable的表,有许多列。
我想要做的是更新该列表中的2个列相匹配的列,但只匹配符合条件的前400条记录。SQL Server 2008 - 仅更新表中的特定行数

实施例:

Name  Ref ID Text 

当REF = 555和id = 7我想更新调用 '匹配' 字文本的列。
我知道会有大约800条符合条件的记录,但我只想更新前400条。
任何人都可以帮忙吗?

Regards, 请问。

回答

6

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 

Demo

+0

添,非常感谢你和其他人的帮助。非常感激。 – Will 2013-04-04 12:17:43

2

您可以使用一个CTE来选择TOP 400行有一个ref=555id=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 with Demo

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; 
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 
+0

假设'ID'为主键,如果'ref'和'id'是一个复合主键或者它们不是唯一的呢? – 2013-04-04 11:56:24

+0

那么,如果是这样的话,那么有必要指定前400个是什么,所以是的,我推测这个ID在该表中是唯一的。 – DrCopyPaste 2013-04-04 12:05:53