2016-06-15 3 views
-3

У меня есть эта линия в моем запросе:SQL оператор обновления верхние и нижние строки

UPDATE Tnm_Lookup SET 
P_C = 'C' 
    where Tnm_Lookup_ID in (select top (355) Tnm_Lookup_ID 
    from Tnm_Lookup 
    where Tnm_Lookup_ID = Tnm_Lookup_ID 
    order by Tnm_Lookup_ID DESC); 

GO 

У меня также есть один для верхних строк в настоящее время пытаются исправить. В основном мне нужно некоторое руководство по тому, как я могу достичь своих результатов, не будучи очень конкретным, т. Е. Выберите top (355)?

Эта таблица будет отличаться от размера, в зависимости от того, кто ее использует, чтобы она начиналась с более или менее и могла быть обновлена.

+0

Итак, вы хотите обновить первую и последнюю строки таблицы? Ваш вопрос немного неясен. – Marusyk

+0

- это то, что вы спрашиваете: как передать переменную rowcount для предиката TOP? – dlatikay

+0

использовать% вместо 355? – xQbert

ответ

0

Если вы инкапсулируете запрос в хранимую процедуру, вы можете передать параметр для rowcount, например. @RowCount, а затем просто замените 355 на @RowCount.

+0

Это может сработать. Позвольте мне попробовать. Извините, я больше сторонник разработчика, а затем обратно. – user2516641

0

Да, я спрашиваю, у меня есть таблица с 950 строками, а половина таблицы - это исходные данные, а другая - то, что было скопировано. Вместо использования заданного количества строк мне нужно использовать другой метод, который будет работать с меньшими и большими таблицами.

+0

Вы должны отредактировать свой вопрос, чтобы уточнить его, а не скрывать комментарий, замаскированный под ответ. – HABO

0

Что-то вроде этого?

declare @t table (id int, trim_lookup_id int,p_c varchar(1)) 

insert into @t values 
(1,1, null), 
(20,2, null), 
(2,3, null), 
(26,4, null), 
(50,5, null), 
(51,1, null), 
(51,2, null), 
(53,3, null), 
(54,4, null), 
(55,5, null) 

;with cte as 
(
    select id,trim_lookup_id,p_c,row_number() over(partition by trim_lookup_id order by id) rn 
from @t 
) 
update @t 
    set p_c = 'C' 
from @t t 
join cte on cte.id = t.id 
where cte.rn = 2 

select * from @t 
Смежные вопросы