Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: IIF в хранимой процедуре
 
 автор: Lvm   (20.05.2007 в 10:44)   личное сообщение
 
 

Здравствуйте.

Понадобилось мне тут, чтобы поле запроса (хранимой процедуры) возвращало сумму двух текстовых полей.
Вставил я в SELECT такое: ..., (dbo.Таблица.Поле1+' '+dbo.Таблица.Поле2), ...
Не вышло - сумма строк отображается только если в обоих полях данные, а если в Поле2 - NULL, то и в результате тоже NULL. Ладно, думаю, тогда так:
IIf((dbo.Таблица.Поле2) Is Null, dbo.Таблица.Поле1, dbo.Таблица.Поле1+' - '+dbo.Таблица.Поле2) - в запросах mdb такая конструкция проходит на ура, а тут ...
Сначала говорит "Incorrect syntax near the keyword 'IS' ". Я подумал, что IS NULL почему то не работает внутри функции IIf. Убрал его совсем (в доках написано, что условие будет TRUE если в поле есть данные, а если нет, то FALSE - то есть все должно работать и так)
И тут она мне выдала: "'IIf' is not a recognized function".
Как же так???
Описание этой функции есть в документации. Она что, не работает в хранимых процедурах? А где тогда она работает?
И что мне придумать с соединением двух полей?
Помогите!

  Ответить  
 
 автор: palarm   (21.05.2007 в 04:59)   личное сообщение
 
 

Для ХП вместо IIF надо делать:
Select Case .... Else .... End

  Ответить  
 
 автор: Akim   (21.05.2007 в 10:47)   личное сообщение
 
 

Попробуйте вместо
IIf((dbo.Таблица.Поле2) Is Null, dbo.Таблица.Поле1, dbo.Таблица.Поле1+' - '+dbo.Таблица.Поле2)


IIf(isnull(dbo.Таблица.Поле2), dbo.Таблица.Поле1, dbo.Таблица.Поле1+' - '+dbo.Таблица.Поле2)

  Ответить  
 
 автор: Lvm   (21.05.2007 в 21:26)   личное сообщение
 
 

Неа. Не то и не то.
isnull - это в бейсике определение пустого значения. А в транзакт-эскюель это специальная функция вида isnull(выражение1, выражение2). Если первое выражение непустое то она его возвращает, а если пустое, то возвращает второе.
С селектом тоже ничего не получилось.
Я делал так:
(select
case (dbo.Таблица.Поле2)
when null dbo.Таблица.Поле1
else then dbo.Таблица.Поле1+' - '+dbo.Таблица.Поле2
end
)
Результат всегда возвращается по else. Причина в том, что when не понимает null. Если ему дать конкретную текстовую строку, например when 'текст', то нормально срабатывает.
Не помогает и если вместо null поставить пустую строку - ''.
Странная какая то функция - работает исключительно по непустому текстовому значению.

В общем то, из ситуации я выкрутился. Слитое поле мне нужно было для отчета. В поле отчета я и засунул IIf. Никогда бы не подумал, что оно будет там работать...

Спасибо всем за помощь.
А всё таки интересно, как получить сумму двух полей в ХП?
Вдруг когда понадобится...

  Ответить  
 
 автор: palarm   (22.05.2007 в 11:32)   личное сообщение
 
 

Про When я забыл....
Текстовые поля собираются через + ' ' +
Я точно их собирал, по моему так:
Select Case When dbo.Таблица.Поле2 = '' Then dbo.Таблица.Поле1 Else dbo.Таблица.Поле2 + ' ' +dbo.Таблица.Поле2 End

В поле отчета я и засунул IIf. Никогда бы не подумал, что оно будет там работать...

У меня половина кода в контролах отчета (IIF, Switch и т. д.), другапя половина - в модуле. Как лучше и правильнее - шут его знает. Но работает одинаково.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList