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

Откуда:
Сообщений: 116
Задача заполнить таблицу данными за год от последний записи до getdate()


Выполняю скрипт и попадаю в бесконечный цикл.
Что в коде может быть написано неправильно

BEGIN TRAN

DECLARE @date date,
		@zrep int,
		@ddate datetime,
		@inative int
SET @inative = '2037' -- указать последний z-отчет
SET @ddate = '20121212 18:00:00.000'
SET @zrep = '260' -- порядковый номер
SET @date = getdate(); 
WHILE (CAST((select ddate from o_zreport where idzreport = '259') as date)) < @date
	BEGIN
		INSERT INTO O_ZReport (idzreport, ddate, idcash, inative, idastreport, pCardSumm)
		VALUES (@zrep, @ddate, 1, @inative, NULL, 0)
		SET @zrep += 1
		SET @ddate += 1
		SET @inative += 1
		--COMMIT TRAN
	END
print '--ERROR--'
ROLLBACK TRAN


259 2012-12-11 18:57:52.000 1 2036 264 0,00 <---- наследия запись в таблице
448 2013-06-18 18:00:00.000 1 2225 NULL 0,00 <----" Сюда вроде как должно было записаться '259 2012-12-12 18:00:00.000 1 2037 NULL 0,00' "
826 2014-07-01 18:00:00.000 1 2603 NULL 0,00
1393 2016-01-19 18:00:00.000 1 3170 NULL 0,00
1771 2017-01-31 18:00:00.000 1 3548 NULL 0,00
2149 2018-02-13 18:00:00.000 1 3926 NULL 0,00
19 дек 12, 18:12    [13655958]     Ответить | Цитировать Сообщить модератору
 Re: бесконечный цикл!!!  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
noTpyJI,

в условии WHILE всё время выбирается одна и та же запись, где значение поля ddate < @date?
19 дек 12, 18:25    [13656038]     Ответить | Цитировать Сообщить модератору
 Re: бесконечный цикл!!!  [new]
noTpyJI
Member

Откуда:
Сообщений: 116
BEGIN TRAN

DECLARE @date date,
		@zrep int,
		@ddate datetime,
		@inative int
                @dt date
SET @inative = '2037' -- указать последний z-отчет
SET @ddate = '20121212 18:00:00.000'
SET @zrep = '260' -- порядковый номер
SET @date = getdate(); 
SET @dt = select ddate from o_zreport where idzreport = '259'
WHILE @dt < @date
	BEGIN
		INSERT INTO O_ZReport (idzreport, ddate, idcash, inative, idastreport, pCardSumm)
		VALUES (@zrep, @ddate, 1, @inative, NULL, 0)
		SET @zrep += 1
		SET @ddate += 1
		SET @inative += 1
                SET @dt += 1
		--COMMIT TRAN
	END
print '--ERROR--'
ROLLBACK TRAN

так ?
19 дек 12, 19:27    [13656299]     Ответить | Цитировать Сообщить модератору
 Re: бесконечный цикл!!!  [new]
AnaceH
Member

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

Чтобы цикл не был бесконечным, значения в условии после while должны меняться в теле цикла. select ddate from o_zreport where idzreport = '259' или @date меняются? С таким же успехом можно написать 1 < 2.
А вообще, используйте либо таблицу чисел\календарь, либо генерируйте последовательность в рекурсивном цте.
19 дек 12, 19:49    [13656368]     Ответить | Цитировать Сообщить модератору
 Re: бесконечный цикл!!!  [new]
noTpyJI
Member

Откуда:
Сообщений: 116
AnaceH
noTpyJI,

Чтобы цикл не был бесконечным, значения в условии после while должны меняться в теле цикла. select ddate from o_zreport where idzreport = '259' или @date меняются? С таким же успехом можно написать 1 < 2.
А вообще, используйте либо таблицу чисел\календарь, либо генерируйте последовательность в рекурсивном цте.


А про рекурсию можно по подробнее?
19 дек 12, 21:08    [13656516]     Ответить | Цитировать Сообщить модератору
 Re: бесконечный цикл!!!  [new]
_djХомяГ
Guest
SQL2005: популярные задачи форума и CTE
Например Пример 3 простите за тафталогию
19 дек 12, 21:36    [13656599]     Ответить | Цитировать Сообщить модератору
 Re: бесконечный цикл!!!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
noTpyJI
AnaceH
noTpyJI,

Чтобы цикл не был бесконечным, значения в условии после while должны меняться в теле цикла. select ddate from o_zreport where idzreport = '259' или @date меняются? С таким же успехом можно написать 1 < 2.
А вообще, используйте либо таблицу чисел\календарь, либо генерируйте последовательность в рекурсивном цте.


А про рекурсию можно по подробнее?
Лучше используйте таблицу-календарь, если вообще возможно создавать новые таблицы (если система не покупная).
19 дек 12, 23:11    [13656877]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить