|
|
|
| Здравствуйте.
Понадобилось мне тут, чтобы поле запроса (хранимой процедуры) возвращало сумму двух текстовых полей.
Вставил я в 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".
Как же так???
Описание этой функции есть в документации. Она что, не работает в хранимых процедурах? А где тогда она работает?
И что мне придумать с соединением двух полей?
Помогите! | |
|
| |
|
|
|
| Для ХП вместо IIF надо делать:
Select Case .... Else .... End | |
|
| |
|
|
|
| Попробуйте вместо
IIf((dbo.Таблица.Поле2) Is Null, dbo.Таблица.Поле1, dbo.Таблица.Поле1+' - '+dbo.Таблица.Поле2)
|
IIf(isnull(dbo.Таблица.Поле2), dbo.Таблица.Поле1, dbo.Таблица.Поле1+' - '+dbo.Таблица.Поле2)
|
| |
|
| |
|
|
|
| Неа. Не то и не то.
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. Никогда бы не подумал, что оно будет там работать...
Спасибо всем за помощь.
А всё таки интересно, как получить сумму двух полей в ХП?
Вдруг когда понадобится... | |
|
| |
|
|
|
| Про When я забыл....
Текстовые поля собираются через + ' ' +
Я точно их собирал, по моему так:
Select Case When dbo.Таблица.Поле2 = '' Then dbo.Таблица.Поле1 Else dbo.Таблица.Поле2 + ' ' +dbo.Таблица.Поле2 End
В поле отчета я и засунул IIf. Никогда бы не подумал, что оно будет там работать...
|
У меня половина кода в контролах отчета (IIF, Switch и т. д.), другапя половина - в модуле. Как лучше и правильнее - шут его знает. Но работает одинаково. | |
|
| |