2013-04-04 31 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