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

Откуда:
Сообщений: 12
Здравствуйте, посоветуйте новичку:
Есть темповая таблица

Как можно проапдейтить в етой таблице данные используя именно цикл? (Как на картинке)

К сообщению приложен файл. Размер - 16Kb
25 авг 17, 18:19    [20750151]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Преподаватель велел циклом?
25 авг 17, 18:27    [20750164]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
MaksProdavayko
Member

Откуда:
Сообщений: 12
да...
25 авг 17, 18:29    [20750178]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Спросите его, зачем он такой чуши вас пытается научить.
25 авг 17, 18:30    [20750181]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
MaksProdavayko
Member

Откуда:
Сообщений: 12
ето пока непонятно....спрошу
но решения все равно надо)))
25 авг 17, 18:34    [20750190]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
MaksProdavayko
ето пока непонятно....спрошу
но решения все равно надо)))


если такое спросите, то можно уже брать пиво и расслабляться
25 авг 17, 18:57    [20750218]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
MaksProdavayko
Как можно проапдейтить в етой таблице данные используя именно цикл? (Как на картинке)
Делаете цикл, в нём, используя переменную для @ID, апдэйтите запись. Потом в конце цикла присваиваете этой переменной значение следующей записи.
26 авг 17, 03:12    [20750698]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Massa52
Member

Откуда:
Сообщений: 379
DECLARE @t TABLE (ID int, DocRef int, DocValue int, DocValue2 int)
INSERT INTO @t (ID, DocRef, DocValue, DocValue2)
VALUES (812402,2404,13, NULL),
(1012499, 9528, 23, NULL),
(1145396, 14647, 34, NULL),
(1361324, 22846, 54, NULL),
(1365357, 22991, 55, NULL);

select * from @t

DECLARE @ID int
DECLARE @i int = 1

SELECT @ID = MIN(ID) FROM @t

WHILE  @@ROWCOUNT > 0
BEGIN
   UPDATE @t SET DocValue2 = @i WHERE ID = @ID 
   SET @i = @i + 1   

   SELECT TOP 1 @ID = ID FROM @t WHERE ID > @ID ORDER BY ID
END 
select * from @t
26 авг 17, 07:17    [20750720]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Alibek B.
Member

Откуда:
Сообщений: 3598
Massa52
SELECT TOP 1 @ID = ID FROM @t WHERE ID > @ID ORDER BY ID

Как только люди не изощряются, лишь бы курсор не использовать.
26 авг 17, 11:39    [20750893]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
mr.dfox
Member

Откуда: Где где .. в караганде
Сообщений: 538
А разве использование курсора не будет считаться циклом?
28 авг 17, 12:57    [20753345]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Alibek B.
Member

Откуда:
Сообщений: 3598
Так цикл и нужен.
И на мой взгляд цикл с курсором лучше, чем цикл с построчным update.
28 авг 17, 13:02    [20753366]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
mr.dfox
А разве использование курсора не будет считаться циклом?
Сам по себе курсор - никакой не цикл.
Откуда вы это взяли?
28 авг 17, 13:07    [20753392]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
mr.dfox
Member

Откуда: Где где .. в караганде
Сообщений: 538
iap,

наверно не правильно выразился - имел виду, перебор курсором в цикле
28 авг 17, 13:29    [20753501]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
mr.dfox
iap,

наверно не правильно выразился - имел виду, перебор курсором в цикле
Зависит от задания. Может, преподаватель хотел проверить, сможет ли ученик выполнить задание без курсора?
28 авг 17, 14:07    [20753662]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Оно ?
DECLARE @t TABLE (ID int, DocRef int, DocValue int, DocValue2 int)
INSERT INTO @t (ID, DocRef, DocValue, DocValue2)
VALUES (812402,2404,13, NULL),
(1012499, 9528, 23, NULL),
(1145396, 14647, 34, NULL),
(1361324, 22846, 54, NULL),
(1365357, 22991, 55, NULL);

declare @x int, @xx int

set @xx=1

DECLARE UpdCol CURSOR  FOR
SELECT ID
FROM @t
order by 1

OPEN UpdCol

FETCH NEXT FROM UpdCol INTO @x

WHILE @@FETCH_STATUS = 0
BEGIN
update @t
set DocValue2 = @xx
where ID=@x

set @xx = @xx + 1

FETCH NEXT FROM UpdCol INTO @x
END
CLOSE UpdCol
DEALLOCATE UpdCol

select * from @t
order by id
28 авг 17, 14:50    [20753852]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Alibek B.
Member

Откуда:
Сообщений: 3598
LSV
where ID=@x

Не оно.
Есть же current of, зачем нужны эти костыли?
28 авг 17, 15:18    [20753961]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Alibek B.
LSV
where ID=@x

Не оно.
Есть же current of, зачем нужны эти костыли?
Не уверен, что current of есть во всех версиях мсскл.
Раз версия не указана, надо писать наиболее стандартный код.
28 авг 17, 16:42    [20754250]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Нектотам
Guest
LSV,

В версии 7.0 уже был. В 2017 вроде всё еще есть. Я не уверен, но, кажется, даже в 6.5 был, но увы, проверить это через почти 20 лет тяжело.
29 авг 17, 15:06    [20756374]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт в таблице посредством цикла  [new]
Нектотам
Guest
LSV,

[url=https://web.archive.org/web/20000302222122/http://msdn.microsoft.com:80/library/psdk/sql/ua-uz_3.htm]Пруф про 7.0 из глубины веков[/url]
29 авг 17, 15:30    [20756466]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить