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

Откуда:
Сообщений: 69
+
declare @table TABLE
( _tagid int,
_datetime datetime,
_value decimal(19, 6),
_isloaded tinyint
)
declare @objectId TABLE
(
_id int
)
insert into @objectId values(12)
insert into @objectId values(15)
insert into @objectId values(17)
insert into @objectId values(18)

while exists(select * from @objectId)
begin
insert into @table

select * from @table

select top 24 (select id from dbo.ww_tags where channel = 130 and station = 18), date_p, rashod, 2 from atm_db.dbo.hour224 order by date_p desc
end

Почему тут вечный цикл? Ведь While по идее должен пройти 4 раза, а у меня висит намертво.
9 апр 12, 16:40    [12388898]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Glory
Member

Откуда:
Сообщений: 104751
ptybn84.07
Почему тут вечный цикл? Ведь While по идее должен пройти 4 раза

И почему на 4ый шаг цикла в @objectId вдруг исчезнут все записи ?
9 апр 12, 16:51    [12389002]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
И? Я уже сделал через индекс. Но понять хочется в чем суть проблемы.
9 апр 12, 17:17    [12389227]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Glory
Member

Откуда:
Сообщений: 104751
ptybn84.07
И? Я уже сделал через индекс. Но понять хочется в чем суть проблемы.

Суть "проблемы" в том, что пока в таблице @objectId есть записи, запрос exists(select * from @objectId) будет возвращать True
И никакой индекс не поможет.
9 апр 12, 17:23    [12389273]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
В том и дело, что в таблице всего 4 записи. Так почему После 4 итерации продолжается перебор?
10 апр 12, 08:21    [12391137]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
ptybn84.07
В том и дело, что в таблице всего 4 записи. Так почему После 4 итерации продолжается перебор?

Потому что гладиолус.
10 апр 12, 08:52    [12391193]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
ptybn84.07
В том и дело, что в таблице всего 4 записи. Так почему После 4 итерации продолжается перебор?
WHILE выполняет итерации, пока выражение в условиях цикла истино.
10 апр 12, 09:03    [12391231]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Exproment
Member

Откуда:
Сообщений: 416
Доходчиво: ваш цикл выполняется пока в таблице есть записи... вы считаете, что пройдя по всем записям цикл завершится.! Это не так. Цикл завершится, когда в таблице не останется записей, т.е. если бы вы в теле цикла удаляли по одной строке при каждой итерации - цикл бы выполнялся 4-ре раза... А так у вас записи в ней будут всегда! и цикл будет веным.
10 апр 12, 09:36    [12391354]     Ответить | Цитировать Сообщить модератору
 Re: Выборка  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1576
ptybn84.07
В том и дело, что в таблице всего 4 записи. Так почему После 4 итерации продолжается перебор?
Потому, что никакого перебора и нет. Цикл while не есть перебор записей, это просто цикл каких-то действий. Так как в цикле ничего не делается из того, что может повлиять на условие выхода из цикла, сей цикл является бесконечным. Вы же в цикле не удаляете записи, а условие поставили на наличие записей. Записи не удаляются, записи всегда есть -> бесконечный цикл.
10 апр 12, 11:37    [12392185]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить