powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / NULL in the ARGUMENT
25 сообщений из 32, страница 1 из 2
NULL in the ARGUMENT
    #35552659
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаем на РВ 10.5 + MSSQL 2005.
После перехода с 6.5 на 10.5 возникли проблемы в DW при передачe NULL параметров.
Например, в DW есть аргумент as_name. В Selecte написано:
Код: plaintext
... WHERE name = :as_name.
При as_name = null в 6.5 все работает нормально. А в 10.5 oшибку не выдает, но результат всегда 0 строк.
Если написать
Код: plaintext
WHERE name is null 
вместо WHERE name = :as_name, то работает нормально. Но написать "WHERE name is :as_name" нельзя.
В таком виде:
Код: plaintext
WHERE name is null AND :as_name is null OR name = :as_name
- результат опять 0 строк. Хотя этот же запрос в 6.5 и в самом MSSQL2005 выдает нужные строки.
Кто сталкивался, как бороться?
Есть какие-нибудь предложения, кроме как добавить во все DW выражения CASE ... WHEN...
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552676
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что для вас "работает нормально" ? Если "Подавая" NULL вы хотите видеть все строки набора, то надо везде написать
WHERE name is null OR name = :as_name
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552688
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRЧто для вас "работает нормально" ? Если "Подавая" NULL вы хотите видеть все строки набора, то надо везде написать
WHERE name is null OR name = :as_name
"Нормально" - значит правильно. Т.е. если as_name = "Вася", то нужно получить все строки, где имя равно "Вася". Если посылаем NULL, то нужно получить все строки, где name = null
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552698
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska пишет:

> получить все строки, где name = null

Извиняюсь за банальность, но сравнение на равенство/неравенство к Null
вообще неприменимо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552701
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Riska пишет:

> получить все строки, где name = null

Извиняюсь за банальность, но сравнение на равенство/неравенство к Null
вообще неприменимо.
Posted via ActualForum NNTP Server 1.4
скорее всего нул передается как стринг
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552707
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спор не по существу - уверен в SQL - ANSI стандарте написано, что с null значениями надо оперировать как is null / is not null. Приколы типа = null / <> null - от лукавого и ВСЕГДА гарантируют вам разнообразное поведение не только на разных серверах БД, но, иногда, даже в пределах одной линейки. С чем вы в принципе и столкнулись
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552715
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напишите простой ИФ или же чем вас СВИШЧ не устраивает?
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552721
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552725
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRне знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
Это типа coalesce() ?
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552729
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Riska пишет:

> получить все строки, где name = null

Извиняюсь за банальность, но сравнение на равенство/неравенство к Null
вообще неприменимо.
Posted via ActualForum NNTP Server 1.4
в 6.5
Код: plaintext
name = :as_name
работает без проблем. Проблема возникла в 10.5
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552738
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska пишет:

> в 6.5 name = :as_name работает без проблем

Coding to the bug тем и плох, что кусает без предупреждения ;).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552739
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRне знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
Даже если и поддерживает, то это не то, что нужно.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552745
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле - проблема была тогда, еще в 6.5. Концептуально. Наконец, в 10.5 они сделали поведение более правильным, как бы дебильным оно вам не сейчас не казалось.
пробуйте isNull(:as_arg, field) или field is null or field = :as_arg - это то, что Вам надо.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552752
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
упс.. сорри, вижу..
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552767
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRisNull(:as_arg, field) или field is null or field = :as_arg - это то, что Вам надо.
Да не надо! Если as_name = "Вася", то нужно получить только строки, где имя равно "Вася". А в Вашем примере будут получены и NULL значения.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552772
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Null в retrieval arguments не передается.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552775
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552783
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
ну, а тип какой у него будет?
значит запрос будет искать все записи имя которых "Null" но не Null
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552792
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Придется по видимому писать CASE.
Или (но это тупо) добавить в конец запроса
...and :as_arg is not null and field = :as_arg
union
select
... повторить запрос, но с
...and :as_arg is null
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552813
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRПридется по видимому писать CASE.
Или (но это тупо) добавить в конец запроса
...and :as_arg is not null and field = :as_arg
union
select
... повторить запрос, но с
...and :as_arg is null
а почему не так?
if field = "null" then
field is null
else
field = :as_arg
end if
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552818
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, вот так)
if :as_arg = "null" then.....
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552821
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashuk Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
ну, а тип какой у него будет?
значит запрос будет искать все записи имя которых "Null" но не Null
Код: plaintext
1.
2.
3.
4.
string ls_name
ls_name = 'Vasya'
dw_1.Retrieve(ls_name)
SetNull(ls_name)
dw_1.Retrieve(ls_name)
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552824
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О как, если впадло CASE. Похож на ваш, вначале топика, но со скобками
and ((field is null and :as_arg is null) or (:as_arg is not null and field = :as_arg))
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552827
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сашук, какой ИФ - то ж ЭсКьюЭль запрос в датавинде :)
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552830
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRО как, если впадло CASE. Похож на ваш, вначале топика, но со скобками
and ((field is null and :as_arg is null) or (:as_arg is not null and field = :as_arg))
извращение))) но то что нуна))
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / NULL in the ARGUMENT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]