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

Откуда:
Сообщений: 24
Добрый день.
Ставлю удаление в процедуру, висит на WAITFOR DELAY '00:00:05', не могу понять в чем дело, до этого отлично отрабатывало.
	if DATEPART(hour,getdate())=16 and datepart(MINUTE,getdate()) between 00 and 15

        DECLARE @today datetime = dbo.DATEONLY(GETDATE()); 
        DECLARE @lastday datetime = DATEADD(MONTH, -3, @today); 
        
        WHILE EXISTS( SELECT 1 FROM [dbo].[Manh_SHIPMENT_DETAIL] WHERE  DATE_TIME_STAMP < @lastday )  

        BEGIN 
                DELETE [dbo].[Manh_SHIPMENT_DETAIL] WHERE internal_shipment_line_num in ( 
                        SELECT TOP 500000 internal_shipment_line_num FROM [dbo].[Manh_SHIPMENT_DETAIL] 
                        WHERE DATE_TIME_STAMP < @lastday and DC = @currentDC
                        ORDER BY 1 
                ); 
                WAITFOR DELAY '00:00:05'; 
        END;


@currentDC задается на каждом шаге, всего их 4.
Если нужно могу скинуть полный текст процедуры.
14 июн 17, 07:12    [20562228]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ВалькирияН,

странно что цикл вы проверяете на одно условие, а удаляете по другому
14 июн 17, 09:04    [20562396]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
ВалькирияН
Member

Откуда:
Сообщений: 24
TaPaK, спасибо, сейчас исправлю.
14 июн 17, 09:24    [20562440]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Если выполняется условие IF, то объявляется и инициализируется @today.
Всё остальное выполняется всегда. Так и было задумано? Или зачем там IF?
14 июн 17, 10:25    [20562640]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3712
iap
Если выполняется условие IF, то объявляется и инициализируется @today.
Всё остальное выполняется всегда. Так и было задумано? Или зачем там IF?


интересный вопрос, после ИФа выполняется только первый декларе или ВХИЛЕ?
14 июн 17, 10:28    [20562652]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Ролг Хупин
iap
Если выполняется условие IF, то объявляется и инициализируется @today.
Всё остальное выполняется всегда. Так и было задумано? Или зачем там IF?


интересный вопрос, после ИФа выполняется только первый декларе или ВХИЛЕ?

ВХИЛЕ лол :)
только следующий стетмент, BEGIN - END например надо
14 июн 17, 10:38    [20562701]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
ВалькирияН,

код содержит ошибку:
если первое условие не будет выполнено, то переменная @today никогда не будет объявлена.
Соответственно, DECLARE @lastday вылетит с исключением.
14 июн 17, 11:01    [20562793]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Владислав Колосов
ВалькирияН,

код содержит ошибку:
если первое условие не будет выполнено, то переменная @today никогда не будет объявлена.
Соответственно, DECLARE @lastday вылетит с исключением.

объявления переменных парсятся своим особым образом, судя по всему :)
объявление сработает всегда вне зависимости от if, а вот инициализация уже будет зависеть.
и, кстати, попробуйте выполнить:
if 1 = 2
declare @a int
else 
declare @a int
14 июн 17, 11:11    [20562871]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Shakill
Владислав Колосов
ВалькирияН,

код содержит ошибку:
если первое условие не будет выполнено, то переменная @today никогда не будет объявлена.
Соответственно, DECLARE @lastday вылетит с исключением.

объявления переменных парсятся своим особым образом, судя по всему :)
объявление сработает всегда вне зависимости от if, а вот инициализация уже будет зависеть.
и, кстати, попробуйте выполнить:
if 1 = 2
declare @a int
else 
declare @a int

если коротко, то план содержит обе ветки IF
14 июн 17, 11:21    [20562926]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
Владислав Колосов
Member

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

да, явно фичи :) компилятор собирает и создаёт объявления переменных независимо от исполнения кода.
14 июн 17, 11:22    [20562930]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
Владислав Колосов
Shakill,

да, явно фичи :) компилятор собирает и создаёт объявления переменных независимо от исполнения кода.
По моему, во всех компиляторах так.
Переменные просто объявляются в declare, независимо от выполнения того кода, где было объявление.
if 1 = 2
    declare @a int
if 1 = 2
    declare @b int
select @a, @b
Другое дело - видимость - в одних языках переменная видима в блоке, а вот в сиквеле вне блока, но почему то только после объявления.
14 июн 17, 12:32    [20563279]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
Владислав Колосов
Member

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

может ошибаюсь, но обычно интерпретаторы выполняют код строка за строкой по тексту, не производя предварительных прогонов.
14 июн 17, 15:14    [20564014]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
Оно-то понятно, что там прогон идет для построения плана процедуры и сбор переменных важен для построения плана запроса.
14 июн 17, 15:19    [20564037]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое удаление в процедуре обновления таблицы  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
в коллекцию
if 1 = 2
BEGIN
	declare @a int
END	
ELSE 
BEGIN
	Select @a
END
15 июн 17, 17:49    [20567926]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить