[MSSQL] sortowanie 3 zmiennych w funkcji

0

Cześć, mam funkcje, w której mam 3 zmienne: @r1, @R2, @r3.

Czy MSSQL ma jakieś wbudowane funkcje, które zwrócą mi największą wartość, czy muszę robić to sam?

0

Raczej nic gotowego nie ma, MAX działa tylko dla danych z tabel.

0

Na upartego można zrobić coś takiego:

create function dbo.moja_funkcja
(
  @a1 int,
  @a2 int,
  @a3 int 
)
returns int
begin
  declare @t table (a int)
  insert into @t values (@a1), (@a2), (@a3)
  return (select max(a) from @t)
end
go
select dbo.moja_funkcja(1,2,3)

albo:

create function dbo.moja_funkcja
(
  @a1 int,
  @a2 int,
  @a3 int 
)
returns @t table (a int)
begin
  insert into @t values (@a1), (@a2), (@a3)
  return
end
go
select max(a) from dbo.moja_funkcja(1,2,3)

Do samego wyliczenia wartości możesz skorzystać z kodu pierwszej funkcji i oczywiście zwracać coś zupełnie innego...

0

A takie cos by nie poszlo? Nie mam pod reka serwera to nie sprawdze.

select max(val) from (select @1 val union select @2 val union select @3 val)Q
0

Poszło i nawet działa :)

0
somekind napisał(a)

Poszło i nawet działa :)

A ktoś może mi powiedzieć, czy będzie szybsze rozwiązanie Johnniego, czy zwykłe ify?

0

Raczej ify. Dla pesymistycznego przypadku wystarczy chyba tylko 3 porownania przejsc w sciezce. Moje pewnie bedzie szybsze do inserta.

0

Najszybsza będzie oczywiście wersja z if-ami. Sporo wolniejsza będzie wersja z unionami, a zdecydowanie najwolniejsza wersja z tabelką małpkową. Oczywiście przy trzech intach te różnice będą rzędu kilkunastu milisekund ale warto wiedzieć na przyszłość przy okazji implementacji czegoś większego.

Insert z wstawianymi wartościami po przecinku będzie chodził tylko na 2008. W 2005 trzeba dać trzy inserty albo insert z selecta z unionami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1