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

Откуда: Россия
Сообщений: 517
Нашел вот такой код
DECLARE @S char(6)
...
WHILE LEN(@S) < 6 
   SET @S = '0'+@S
SELECT @S

Хочется точно знать - возможен при каких то значениях переменной @S вечный WHILE или нет. С моей точки зрения - тут все корректно, вроде, если длина переменной при объявлении точно 6, то вроде бы не должно быть вечного цикла.

P.S. Писал не я, наткнулся.
14 мар 13, 15:43    [14048208]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Переписать без цикла и забыть не?
14 мар 13, 15:54    [14048303]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
'0'+NULL => NULL
14 мар 13, 15:57    [14048322]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Cygapb-007
'0'+NULL => NULL

И?.. :)
LEN(NULL) => NULL
NULL < 6 => UNKNOWN
WHILE UNKNOWN => не заходим в цикл.
14 мар 13, 16:01    [14048348]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
invm
Переписать без цикла и забыть не?

Ищу плавающую проблему (подвисание), пока не могу локализовать, это не единственный подозрительный участок. Хотелось бы точно найти из-за чего, а ежели все переписать, то из-за чего проблема возникала (аукается в клиентском приложении) можно так и не узнать :)
14 мар 13, 16:05    [14048370]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Ээээ... Ну да:) Сорь)
14 мар 13, 16:05    [14048373]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ambarka_max, а трассировка не поможет? Alt+F5 ?
14 мар 13, 16:08    [14048394]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ambarka_max
Ищу плавающую проблему (подвисание), пока не могу локализовать

А просто посмотреть при подвисании, какой участок кода сейчас выполняется — не?
14 мар 13, 16:09    [14048408]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Cygapb-007
ambarka_max, а трассировка не поможет? Alt+F5 ?

На боевом сервере не могу, а на тестовых проблема не воспроизводится. SQL процедуры штатно отрабатывают, думаю это из-за каких-то специфичных условий.
Ну если это не в этом WHILE значит буду копать дальше )
Спасибо всем.
14 мар 13, 16:10    [14048416]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Гость333
Member

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

Вечный цикл возможен, если заменить padding character на пробел:
DECLARE @S char(6)
SET @S = ''
WHILE LEN(@S) < 6 
   SET @S = ' '+@S
SELECT @S

В этом случае LEN(@S) всегда будет равным 0, и выхода из цикла не произойдёт.
14 мар 13, 16:16    [14048457]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
ambarka_max,
вместо цикла

set @s=right('000000'+@s,6)


?
14 мар 13, 19:28    [14049485]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
ambarka_max
На боевом сервере не могу, а на тестовых проблема не воспроизводится.
Так попросите того кто может.
14 мар 13, 22:21    [14049910]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Sekoka
Member

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

разве это получится с типом данных char?
15 мар 13, 07:15    [14050505]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Sekoka
Member

Откуда:
Сообщений: 73
без цикла такой вариант поможет

DECLARE @S char(6)
...
SET @S=REPLICATE('0',6-LEN(@s))+@s
SELECT @S
15 мар 13, 07:22    [14050516]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Sekoka
VladimirKr,

разве это получится с типом данных char?


Да вы правы, некорректно, если пробелы в конце...
15 мар 13, 08:40    [14050677]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Еще вариант зацикливания:
DECLARE @S char(6)=''
WHILE LEN(@S) < 6 
   SET @S = @S+'0'
SELECT @S
15 мар 13, 08:49    [14050703]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли вечный цикл вот тут?  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Я очень рад за тех, кто знает как переписать это без цикла) Не в том вопрос был. Всем кто рассуждал про зацикливание (по теме) - респект.
15 мар 13, 09:32    [14050862]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить