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

Откуда:
Сообщений: 15
DECLARE @tsn_id7 int
set @tsn_id7= 1
DECLARE @god1 int
set @god1= 2014
DECLARE @men_id7 int
set @men_id7= 8
select * from plan_sezon_all
where
case
when @tsn_id7=0
then CAST(substring(nn,1,4) as integer) = @god1
ELSE substring(nn,1,5) = cast(@god1 as string)+cast(@tsn_id7 as string)
end
AND
case
when @men_id7=0
then CAST(men as integer)<>99
ELSE CAST(men as integer)=@men_id7
end


Сообщение 102, уровень 15, состояние 1, строка 11
Incorrect syntax near '='.
10 фев 14, 11:02    [15544972]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с кодом  [new]
Glory
Member

Откуда:
Сообщений: 104760
case - это функция, которая возвращает результат.
После then должен стоять возвращаемое значение.

ЗЫ
А что, написать простые AND/OR со скобками, не камильфо ?
10 фев 14, 11:07    [15544994]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с кодом  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Написано же - строка 11! Кто ж так CASE пишет?
10 фев 14, 11:08    [15544997]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с кодом  [new]
skvair
Member

Откуда:
Сообщений: 15
Спасибо. Почему то в голову не приходило and or использовать


DECLARE @tsn_id7 int
set @tsn_id7= 1
DECLARE @god1 int
set @god1= 2014
DECLARE @men_id7 int
set @men_id7= 8
select * from plan_sezon_all
where
(
(@tsn_id7=0 and substring(nn,1,4) = @god1)
or
(substring(nn,1,5) = cast(@god1 as CHAR)+cast(@tsn_id7 as CHAR) and @tsn_id7<>0)
)
AND
(
(@men_id7=0 and CAST(men as integer)<>99) or (@men_id7<>0 and CAST(men as integer)=@men_id7)
)
10 фев 14, 11:50    [15545276]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с кодом  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
skvair
Спасибо. Почему то в голову не приходило and or использовать


DECLARE @tsn_id7 int
set @tsn_id7= 1
DECLARE @god1 int
set @god1= 2014
DECLARE @men_id7 int
set @men_id7= 8
select * from plan_sezon_all
where
(
(@tsn_id7=0 and substring(nn,1,4) = @god1)
or
(substring(nn,1,5) = cast(@god1 as CHAR)+cast(@tsn_id7 as CHAR) and @tsn_id7<>0)
)
AND
(
(@men_id7=0 and CAST(men as integer)<>99) or (@men_id7<>0 and CAST(men as integer)=@men_id7)
)
Чего-то я сомневаюсь в правильности того, что Вы понаписали.
Например, преобразование в CHAR(30) - зачем?
В nn хранится дата? А почему такой странный тип для этого?
10 фев 14, 12:37    [15545541]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить