Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 последовательный Update строк!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Добрый день, друзья.
Такая проблема. У меня в БД есть таблица, в которой более 7 000 записей. Я хочу update-нуть по 100 строк! т.е при каждом выполнении моего запроса, должно обновляться по 100 строк этой таблицы. Как мне это сделать?
Буду благодарен за совет и линки, где можно про это дело узнать что нибудь дельное!
Спасибо!
26 июн 14, 14:24    [16223417]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
взять поле на основе которого можно отсортировать набор строк и в цикле изменять
26 июн 14, 14:29    [16223456]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
совет от Knyazev Alexey + update top(100) если версия позволяет
26 июн 14, 14:34    [16223479]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Knyazev Alexey, Алексей, спасибо большое за отклик! Вы не могли бы на каком нибудь примере это дело показать или направить на какой нибудь линк, чтобы я это увидел или что то схожее с этим делом?
Спасибо!
26 июн 14, 14:38    [16223506]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Maxx, Top (100) я уже сделал, нормально работает, но когда я повторно запускаю запрос, он обновляет, опять, те же 100 первых строк!
26 июн 14, 14:40    [16223515]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
adimmat,

потому что совет от Князев Алексей ,должно быть условие по которому ети записи обрабатываються
26 июн 14, 14:43    [16223531]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Maxx, Вот мой запрос, он выглядит след. образом:
Update top (100) [sprdb].[dbo].[tb_Territory]
set hname = (select N'улица ' + Left (hname,len (hname))) 
where hrccrt like N'%.1.17.21.%' AND
(
	hrccrt_name not like N'%1%'   AND
	hrccrt_name not like N'%2%' AND
	hrccrt_name not like N'%3%'  AND
	hrccrt_name not like N'%4%' AND
	hrccrt_name not like N'%5%'  AND
	hrccrt_name not like N'%6%'  AND
	hrccrt_name not like N'%7%'  AND
	hrccrt_name not like N'%8%'     AND
	hrccrt_name not like N'%9%'  AND
	hrccrt_name not like N'%10%'  AND
	hrccrt_name not like N'%11%'  AND
	hrccrt_name not like N'%12%' AND
	hrccrt_name not like N'%13%' AND
	hrccrt_name not like N'%14%' AND
	hrccrt_name not like N'%15%' AND
	hrccrt_name not like N'%16%' AND
	hrccrt_name not like N'%17%' 
)


P/S: числа 1...17 это условно, там я поставлю сроки, которые пропускаются при обновлении!
26 июн 14, 14:47    [16223564]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4805
adimmat
Добрый день, друзья.
Такая проблема. У меня в БД есть таблица, в которой более 7 000 записей. Я хочу update-нуть по 100 строк! т.е при каждом выполнении моего запроса, должно обновляться по 100 строк этой таблицы. Как мне это сделать?
Буду благодарен за совет и линки, где можно про это дело узнать что нибудь дельное!
Спасибо!


Загоните список ID-шников во временную таблицу. В цикле берите оттуда по TOP 100 строк в другую временную таблицу. Обновляйте это 100, удаляйте эти ID-шники из первой временной таблицы. Итак, пока она не опустеет.
26 июн 14, 14:49    [16223591]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
как узнать поле апдейтилось или нет ????
у вас поле hrccrt_name не меняеться... оно не годиться как идетификатор того был апдейт или нет ю
Хотя бы добавить в where чего то типа hname not like N'улица %'
26 июн 14, 14:50    [16223599]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
declare @t table (id int primary key);

Loop:
 Update top (100) [sprdb].[dbo].[tb_Territory]
 set hname = (select N'улица ' + Left (hname,len (hname))) 
 output
  inserted.id int @t
 where hrccrt like N'%.1.17.21.%' AND
 (
	hrccrt_name not like N'%1%'   AND
	hrccrt_name not like N'%2%' AND
	hrccrt_name not like N'%3%'  AND
	hrccrt_name not like N'%4%' AND
	hrccrt_name not like N'%5%'  AND
	hrccrt_name not like N'%6%'  AND
	hrccrt_name not like N'%7%'  AND
	hrccrt_name not like N'%8%'     AND
	hrccrt_name not like N'%9%'  AND
	hrccrt_name not like N'%10%'  AND
	hrccrt_name not like N'%11%'  AND
	hrccrt_name not like N'%12%' AND
	hrccrt_name not like N'%13%' AND
	hrccrt_name not like N'%14%' AND
	hrccrt_name not like N'%15%' AND
	hrccrt_name not like N'%16%' AND
	hrccrt_name not like N'%17%' 
 ) and not exists(select 1 from @t where id = [sprdb].[dbo].[tb_Territory].id);

if @@rowcount > 0
 goto Loop;


Осталось непонятным зачем такую мизерную таблицу обновлять порциями?
26 июн 14, 15:25    [16223973]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4805
invm
declare @t table (id int primary key);

Loop:
 Update top (100) [sprdb].[dbo].[tb_Territory]
 set hname = (select N'улица ' + Left (hname,len (hname))) 
 output
  inserted.id int @t
 where hrccrt like N'%.1.17.21.%' AND
 (
	hrccrt_name not like N'%1%'   AND
	hrccrt_name not like N'%2%' AND
	hrccrt_name not like N'%3%'  AND
	hrccrt_name not like N'%4%' AND
	hrccrt_name not like N'%5%'  AND
	hrccrt_name not like N'%6%'  AND
	hrccrt_name not like N'%7%'  AND
	hrccrt_name not like N'%8%'     AND
	hrccrt_name not like N'%9%'  AND
	hrccrt_name not like N'%10%'  AND
	hrccrt_name not like N'%11%'  AND
	hrccrt_name not like N'%12%' AND
	hrccrt_name not like N'%13%' AND
	hrccrt_name not like N'%14%' AND
	hrccrt_name not like N'%15%' AND
	hrccrt_name not like N'%16%' AND
	hrccrt_name not like N'%17%' 
 ) and not exists(select 1 from @t where id = [sprdb].[dbo].[tb_Territory].id);

if @@rowcount > 0
 goto Loop;


Осталось непонятным зачем такую мизерную таблицу обновлять порциями?


Полностью поддерживаю данное решение, с единственно оговоркой, в приличном общество GOTO не пишут
26 июн 14, 15:31    [16224041]     Ответить | Цитировать Сообщить модератору
 Re: последовательный Update строк!  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
a_voronin
Полностью поддерживаю данное решение
Спасибо что разрешили.
И держите нас в курсе.
invm
Loop:
-- ...
if @@rowcount > 0
 goto Loop;
Кажись, если мне не изменяет память, вы уже писали что боитесь безусловных WHILE
WHILE (1 = 1) BEGIN
-- ...
IF (@@RowCount = 0) BREAK; END
30 июн 14, 04:51    [16236653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить