[ goranue @ 12.11.2006. 21:35 ] @
Umam jedan problem.
Na koji nacin mogu uskladistenu proceduru da napisem u sledecem obliku

...
Select ....
Where (...)
if @abd =1
and (iskaz1...)
else
and (iskaz2...)

Gde je @abc ulazni parametar (npr. izbor na radio dugmetu u nekom programu)
[ goranvuc @ 12.11.2006. 21:49 ] @
Code:

CREATE PROCEDURE test 
   @abd int
AS 
SELECT * FROM tabela WHERE polje = @abd
GO

Valjda si na to mislio.
[ goranue @ 13.11.2006. 15:39 ] @
Hvala na odgovoru, ali nisam na to mislio.

Potrebno je da procedura izgleda otprilike ovako:
(tabela naka na primer ima polja: a, b, c, d, e, f)
x, y, z, g, h su neke konstante
CREATE PROCEDURE test
@abd int
AS
SELECT * FROM tabela WHERE a<x and b>y
IF @abd = 1
(and c =z or d <g)
else
and f>h
GO
Znaci potrebno je da unutar "Select" iskaza ubacim iskaz "IF".
[ Fedya @ 13.11.2006. 16:02 ] @
Mozes da napises nesto kao:

WHERE a<b AND (CASE @param WHEN 1 THEN c<d ELSE f<g END)

nisam siguran (ne mogu sad da proverim) ali tako nekako bi trebalo da moze. Ako ne podje eksperimentisi malo sa CASE za to sluzi

[Ovu poruku je menjao Fedya dana 13.11.2006. u 19:53 GMT+1]
[ goranvuc @ 13.11.2006. 16:20 ] @
Moraces da koristis sp_executesql
[ logic_rabbit @ 15.11.2006. 07:16 ] @
IF @abd = 1
BEGIN
SELECT * FROM tabela WHERE a<x and b>y
and (c =z or d <g)
END
ELSE
BEGIN
SELECT * FROM tabela WHERE a<x and b>y
and f>h
END

[Ovu poruku je menjao logic_rabbit dana 15.11.2006. u 14:54 GMT+1]
[ Fedya @ 15.11.2006. 08:16 ] @
Citat:
logic_rabbit: IF @abd = 1
BEGIN
SELECT * FROM tabela WHERE a<x and b>y
(and c =z or d <g)
else
and f>h
END
ELSE
BEGIN
SELECT * FROM tabela WHERE a<x and b>y
END


Da, ovo je dobar primer kako NE TREBA raditi. U redu, ovo je jednostavan primer, ali da je u pitanju neka slozenija procedura bukvalno bi imao kopiju iste procedure sa malim razlikama. Odlucis da promenis nesto, moras dobro da pazis da se to menja na oba mesta inace... Ovo je leglo bagova.
[ logic_rabbit @ 15.11.2006. 13:56 ] @
Bila je greska u brzini.Ovo je resenje a sad da li je pametno to je druga stvar...
[ jablan @ 15.11.2006. 18:57 ] @
Definitivno nije dobro svako rešenje koje duplira kôd...

Ovi problemi se rešavaju jednostavnim proširenjem where uslova:

npr. primer koji ti iznosiš:
Citat:
goranue:
SELECT * FROM tabela
WHERE a<x and b>y
IF @abd = 1
(and c =z or d <g)
else
and f>h

bi se napisao kao:
Code:

WHERE a<x and b>y
AND (@abd <> 1 OR c = z or d < g)
AND (@abd = 1 OR f > h)

Inače, pitanje nema apsolutno nikakve veze sa uskl. procedurama.
[ logic_rabbit @ 16.11.2006. 07:02 ] @
Citat:
jablan: Definitivno nije dobro svako rešenje koje duplira kôd...

Ovi problemi se rešavaju jednostavnim proširenjem where uslova:

npr. primer koji ti iznosiš:

bi se napisao kao:
Code:

WHERE a<x and b>y
AND (@abd <> 1 OR c = z or d < g)
AND (@abd = 1 OR f > h)

Inače, pitanje nema apsolutno nikakve veze sa uskl. procedurama.



Tvoje resenje je posve tacno i elegantno resenje koje se cesto koristi.

[Ovu poruku je menjao logic_rabbit dana 16.11.2006. u 14:25 GMT+1]
[ neshto vishe @ 29.06.2011. 09:41 ] @
Pozdrav svima, da li neko zna gdje se moze skinuti dobra knjiga za 'SQL Procedure'?
Da obuhvata pocetak rada sa procedurama i primjere...
[ AMD guy @ 30.06.2011. 17:01 ] @
Otvorio si temu staru 5 godina.
Probaj neku knjigu tipa Beginning T-sql ili tako nesto, ne verujem nesto da ima knjiga bas specificno za stored procedure.