[mssql] как внутри procedure узнать что параметр dec = null ?

Alena_08_11

короче есть какая то procedure в которой есть :
....
declare
@parameter dec(18,2
....
select
@parameter = (select blah blah blah ... from blah blah blah ... where blah blah blah ...
....
Хочется, если (select blah blah blah ... from blah blah blah ... where blah blah blah ...) ничего не возвращает, приравнять @parameter к нулю
пробовал пока только так :
....
select
@parameter = (select blah blah blah ... from blah blah blah ... where blah blah blah ...)
if(@parameter = null)
begin
select @parameter = 0
end
...
Почему то не получаеццо

Alena_08_11

бля
cлучайно нашёл в примере к if из хелпа
нада не if(@parameter = 0) а if(@parameter is null)

bastii

а можно просто SET ANSI_NULLS OFF

rosali

@param = ifnull(...,0)  

bastii

@param = ifnull(...,0)
что это?

rosali

это SQL Ну по крайней мере MySQL...
 select @parameter = ifnull (select blah blah blah ... from blah blah blah ... where blah blah blah ..., 0) 

zya369

имхо, не ifnull а nullif хотя хз ентих МС знает - у них все не как у людей
а вообще nullif(..,0) делает прямо противоположную задачу
а тут поможет coalesce:

@param = coalesce(...,0)

ЗЫ coalesce( список параметров ) возвращает первый элемент из списка параметров который "is not null"

zya369

ifnull (select blah blah blah ... from blah blah blah ... where blah blah blah ..., 0)
судя по всему, это мускульный аналог coalesce и к стандартному nullif не имеет никакого отношения

rosali

о. в MSSQL он называется isnull

zya369

короче, m*sql - ацтой
имхо, coalesce - это стандарт

Dasar

> короче, m*sql - ацтой
первая ссылка в google: coalesce sql кстати ведет на:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_9dph.asp

zya369

PS coalesce и nullif в sql92 есть, а isnull - видимо нет
(если верить этому

bastii

просто mssql довольно старый продукт, возможно isnull сделали до sql-92

laki

а че ето мсдн онлайн такой стремный?
или это какой-то облегченный?

Dasar

что значит "стремный"?

laki

скажем нестандартный.

Alena_08_11

а можно просто SET ANSI_NULLS OFF
А можно поподробнее ? Что именно значит эта команда ?

bastii

эта команда отключает поведение оперетора = по стандурту, когда сравнивается значение с NULL
при set ansi_nulls on условие a = null никогда не выполнится
при set ansi_nulls off условие a = null эквивалентно a is null

rosali

То есть a=b верно если они оба null? Ахуэнная идея!

gopnik1994

"а здесь для простоты примем "пи" равным шести"...
Оставить комментарий
Имя или ник:
Комментарий: