2013-04-04 2 views
1

У меня есть таблица под названием mytable с несколькими столбцами.
То, что я пытаюсь сделать, - это обновить столбец в этой таблице, где сопоставляются 2 столбца, но только для первых 400 записей, соответствующих критериям.SQL Server 2008 - Обновление только определенного количества строк в таблице

Пример:

Колонны

Name  Ref ID Text 

Когда исх = 555 и ID = 7 Я хочу, чтобы обновить столбец текста со словом 'совпадениям'.
Я знаю, что будет около 800 записей, соответствующих критериям, но я хочу только обновить первые 400.
Может ли кто-нибудь помочь в этом, пожалуйста?

С уважением, Воля.

ответ

6

Один простой способ использует ROW_NUMBER в 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 

Demo

+0

Тим, который работал большой , большое вам спасибо и все остальные за вашу помощь. Очень признателен. – Will

2

Вы можете использовать КТР для выбора 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'; 

См 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' являются составным первичным ключом или они не уникальны вообще? –

+0

Ну, если бы это было так, нужно было бы указать, что такое первые 400, так что я предположил, что идентификаторы уникальны в этой таблице. – DrCopyPaste