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

Откуда:
Сообщений: 7
Моя задача, чтобы архив создавался под именем неделя и номер недели, написал T-SQL, но не хочет исполняться.

Вот он:

declare @n varchar(1000)
declare @num_week varchar(10)

set @num_week =
case
when DAY(getdate()) < 8 THEN '1'
when DAY(getdate()) > 7 and DAY(getdate() < 15 THEN '2'
when DAY(getdate()) > 14 and DAY(getdate() < 22 THEN '3'
when DAY(getdate()) > 21 and DAY(getdate() < 29 THEN '4'
when DAY(getdate()) > 28 THEN '5'
else '0'
end;

select @n = 'D:\base_'+

'week_' +

@num_week +

'.BAK'

BACKUP DATABASE [base] TO DISK = @n WITH NOFORMAT, INIT, NAME = N'Back Up base', SKIP, REWIND, NOUNLOAD, NO_COMPRESSION, STATS = 10

Помогите разобраться, что ему надо?
4 фев 13, 07:51    [13870293]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
AlexAlex1982,

Только если очки прописать - нет закрывающих скобок , да и ошибки явно указывают
4 фев 13, 07:54    [13870295]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
AlexAlex1982
Member

Откуда:
Сообщений: 7
Ken@t,

То-т ои проблема, что он мне не хочет говорить, что за проблема, он просто пишет



Выполнить план обслуживания

- Выполнить план обслуживания. Тестовая (Ошибка)
Сообщения
Execution failed. See the maintenance plan and SQL Server Agent job history logs for details.

------------------------------
ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ:

Job 'Тестовая.ВложенныйПлан_1' failed. (SqlManagerUI)



, что ошибка исполнения. А где очки прописать?
4 фев 13, 08:00    [13870301]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
AlexAlex1982,

declare @n varchar(1000)
declare @num_week varchar(10)

set @num_week = 
case 
when DAY(getdate()) < 8 THEN '1'
when DAY(getdate()) > 7 and DAY(getdate()) < 15 THEN '2'
when DAY(getdate()) > 14 and DAY(getdate()) < 22 THEN '3'
when DAY(getdate()) > 21 and DAY(getdate()) < 29 THEN '4'
when DAY(getdate()) > 28 THEN '5'
else '0'
end;

select @n = 'D:\base_'+

'week_' +

@num_week +

 '.BAK' 

Понятие - отладка , для вас не известно ?
4 фев 13, 08:07    [13870306]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
AlexAlex1982
Member

Откуда:
Сообщений: 7
Ken@t,

Не знал, что отладка в SQL тоже есть... Пробую добавить скобки.
4 фев 13, 08:12    [13870311]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
AlexAlex1982
Member

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

Не хочет работать... (((
4 фев 13, 08:19    [13870330]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
AlexAlex1982
Member

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

Если конструкцию CASE убрать, работет, а так нет...
4 фев 13, 08:19    [13870332]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
AlexAlex1982
Member

Откуда:
Сообщений: 7
Придется, видимо, реализовать через инструкцию If...
4 фев 13, 08:24    [13870336]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
AlexAlex1982
Придется, видимо, реализовать через инструкцию If...

Заявязывайте с программированием, не ваше это.
declare @n varchar(1000)
declare @num_week varchar(10)

set @num_week = 
case 
when DAY(getdate()) < 8 THEN '1'
when DAY(getdate()) > 7 and DAY(getdate()) < 15 THEN '2'
when DAY(getdate()) > 14 and DAY(getdate()) < 22 THEN '3'
when DAY(getdate()) > 21 and DAY(getdate()) < 29 THEN '4'
when DAY(getdate()) > 28 THEN '5'
else '0'
end;

select @n = 'D:\base_'+

'week_' +

@num_week +

 '.BAK' 

select @n 

BACKUP DATABASE [area] TO DISK = @n WITH NOFORMAT, INIT, NAME = N'Back Up base', SKIP, REWIND, NOUNLOAD, NO_COMPRESSION, STATS = 10


10 обработано.
20 обработано.
30 обработано.
40 обработано.
50 обработано.
60 обработано.
70 обработано.
80 обработано.
90 обработано.
Обработано 18016 страниц для базы данных "area", файл "areas" для файла 1.
100 обработано.
Обработано 2 страниц для базы данных "area", файл "areas_log" для файла 1.
BACKUP DATABASE успешно обработал 18018 страниц за 1.956 секунд (71.962 MБ/сек).
4 фев 13, 08:38    [13870361]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
AlexAlex1982
Member

Откуда:
Сообщений: 7
Ken@t,

Спасибо, все сработало. Оказалось, что ошибка в пути папки. На счет программирования подумаю... :-)
4 фев 13, 08:41    [13870369]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
declare @num_week char = 1+(day(getdate())-1)/7
select @num_week
4 фев 13, 09:33    [13870470]     Ответить | Цитировать Сообщить модератору
 Re: Инструкция на T-SQL оператор Case не выполняется  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 400
Cygapb-007
declare @num_week char = 1+(day(getdate())-1)/7
select @num_week


Отлично)

Но есть вопрос к самой постановке задачи:
Насколько понял, автор хочет узнать, на какую неделю месяца приходится день.

Но если месяц начался с воскресенья, то 2-е число - это уже 2-я неделя.


Как это можно обработать:
Номер недели, с начала года:
SELECT DATEPART(dayofyear, GETDATE())/7 + 1 

Потом смотрим номер недели с начала года - для 1-го числа месяца
SELECT DATEPART(DAYOFYEAR, DATEADD(DAY,1-DAY(GETDATE()),GETDATE()))/7 + 1


1+разница недель - будет номер недели в месяце для конкретного дня:
SELECT @num_week = (DATEPART(dayofyear, GETDATE())/7) - (DATEPART(DAYOFYEAR, DATEADD(DAY,1-DAY(GETDATE()),GETDATE()))/7)
4 фев 13, 15:57    [13873204]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить