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

Откуда: Москва
Сообщений: 798
Почему не работает конструкция в хранимой процедуре

CASE @spr
WHEN 'Банки' THEN exec (@sql)
WHEN 'БанковскиеСчета' THEN exec (@SQL)
WHEN 'Валюты'
THEN
BEGIN
Set @errex = '20010/Неправильно указано наименование объекта метаданных'
RETURN
END
WHEN 'ВариантыРасчетаНалогов' THEN exec (@SQL)
... и т.д.

END

@spr - входной параметр процедуры.
@sql и @errex объявлены правильно
Выдает ошибку "INCORRECT SYNTAX NEAR KEYWORD CASE" а также "WHEN"
Испробовал всякие варианты CASE, IF. Подозрение, что переменная @spr тут не катит. Или exec (@SQL)? Как тогда быть?
4 дек 05, 15:37    [2139367]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
автор
Почему не работает конструкция в хранимой процедуре

Потому что у конструкции CASE нет такого синтаксиса.
Синтаксис с примерами можно посмотреть в BOL.
4 дек 05, 15:38    [2139370]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
garvy
Member

Откуда: Москва
Сообщений: 798
Увы, господа, наверное я тупой. Я уже 10 раз в BOL смотрел - не вижу ошибок. Правда я не нашел примеров с переменными.
Помогите тупому.
4 дек 05, 15:45    [2139380]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Fogkch
Member

Откуда: Питер
Сообщений: 136
Попробуй за END-ить каждый WHEN
4 дек 05, 15:50    [2139384]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
garvy
Member

Откуда: Москва
Сообщений: 798
Сейчас попробую, хотя не уверен, что это решение, так как я пробовал переделать CASE на кучу IF
там выдает ошибку на некорректный синтаксис около слова IF
Все таки писать
WHEN @spr = 'Банки' в условии можно?
или же надо что-то типа
WHEN Select @spr = ?
4 дек 05, 15:57    [2139392]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Зенит-чемпион
Guest
Вообще то конструкция CASE используется в SELECT'е
В вашем случае надо как то так
if @spr='Банки'
   exec (@sql)
else if @spr='БанковскиеСчета'
    ......
else if @spr='Валюты'
begin
   Set @errex = '20010/Неправильно указано наименование объекта метаданных'
   return 
end
4 дек 05, 16:27    [2139423]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
Конструкция case - это часть выражения, а не оператор ветвления, как в классических языках.
4 дек 05, 16:42    [2139447]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
garvy
Member

Откуда: Москва
Сообщений: 798
Насчет CASE понял - неправ. Но конструкция IF в предложенном виде тоже не работает - это я уже проверял.
4 дек 05, 17:11    [2139486]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Зенит-чемпион
Guest
Но конструкция IF в предложенном виде тоже не работает - это я уже проверял.


Напишите простейший IF, посмотрите, как он работает, а потом адаптируете к вашему условию ...
4 дек 05, 17:58    [2139548]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
garvy
Насчет CASE понял - неправ. Но конструкция IF в предложенном виде тоже не работает - это я уже проверял.

И в каком же виде она не работает?
З.Ы.
if @spr = 'Банки'
  exec (@sql)
else if @spr = 'БанковскиеСчета' 
  exec (@SQL)
else if @spr = 'Валюты' BEGIN 
Set @errex = '20010/Неправильно указано наименование объекта метаданных'
RETURN 
END
else if @spr = 'ВариантыРасчетаНалогов' 
  exec (@SQL) 
... и т.д.
4 дек 05, 18:00    [2139550]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
Зенит-чемпион
Guest

CASE @spr
WHEN 'Банки' THEN exec (@sql)
WHEN 'БанковскиеСчета' THEN exec (@SQL)
WHEN 'Валюты'
THEN
BEGIN
Set @errex = '20010/Неправильно указано наименование объекта метаданных'
RETURN ....
WHEN 'ВариантыРасчетаНалогов' THEN exec (@SQL)


Кстати, а зачем тут такое сложное логическое ветвление, если почти всегда выполняется одна команда exec(@sql)

т е можно записать это попроще
if @str='Валюты'
begin
  Set @errex = '20010/Неправильно указано наименование объекта метаданных'
  RETURN 
end
else
  exec (@sql)
4 дек 05, 18:06    [2139556]     Ответить | Цитировать Сообщить модератору
 Re: Не работает конструкция CASE  [new]
garvy
Member

Откуда: Москва
Сообщений: 798
Спасибо всем. Вашими молитвами, т.е. подсказками разобрался.
5 дек 05, 13:00    [2141109]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить