/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MSSQL: Avanceret WHERE klausul
Fra : Ukendt


Dato : 03-08-02 17:51

Hej,

Kan man lave noget lign dette :

CREATE PROCEDURE proc
(
@FirmaId int = -1
)
AS

SELECT
Id,
FirmaId,
Navn,
Beskrivelse
FROM personer
WHERE ( IF( @FirmaId = -1 ) FirmaId = ANY( SELECT DISTINCT Id FROM firmaer )
ELSE FirmaId = @FirmaId )

- altså; hvis @FirmaId er lig -1 ( default ) returneres alle personer og
hvis @FirmaId er lig et andet tal returneres kun de records hvor kriteriet
passer.

( Ovenstående virker naturligvis ikke, og problemet kunne sagtents løses med
2 forskellige seletc's, men hvis der nu er f.eks. 3 parametre på proceduren
bliver 2 høns hurtigt til 9 )

På forhånd tak...

Søren Staun Jørgensen




 
 
Jakob Andersen (03-08-2002)
Kommentar
Fra : Jakob Andersen


Dato : 03-08-02 19:50

"Soren Staun Jorgensen" <ssj(at)cadeye(dot)dk> wrote
> ( Ovenstående virker naturligvis ikke, og problemet kunne sagtents løses
med
> 2 forskellige seletc's, men hvis der nu er f.eks. 3 parametre på
proceduren
> bliver 2 høns hurtigt til 9 )

Du prøver at lave dynamisk SQL i en stored procedure. Det gør man som regel
ved at ved at bruge EXEC funktionen eller sp_executesql

Du kan læse mere her:
<http://www.sqlteam.com/item.asp?ItemID=4599>
<http://www.sqlteam.com/item.asp?ItemID=4619>

--
Jakob Andersen
http://www.stresscd.dk/ - Udnyt stress positivt



Ukendt (05-08-2002)
Kommentar
Fra : Ukendt


Dato : 05-08-02 11:49

Jamen selvfølgelig

Tak for hjælpen...

Søren


"Jakob Andersen" <jakob@effectus.dk> skrev i en meddelelse
news:aih8ct$2a6u$1@news.cybercity.dk...
> "Soren Staun Jorgensen" <ssj(at)cadeye(dot)dk> wrote
> > ( Ovenstående virker naturligvis ikke, og problemet kunne sagtents løses
> med
> > 2 forskellige seletc's, men hvis der nu er f.eks. 3 parametre på
> proceduren
> > bliver 2 høns hurtigt til 9 )
>
> Du prøver at lave dynamisk SQL i en stored procedure. Det gør man som
regel
> ved at ved at bruge EXEC funktionen eller sp_executesql
>
> Du kan læse mere her:
> <http://www.sqlteam.com/item.asp?ItemID=4599>
> <http://www.sqlteam.com/item.asp?ItemID=4619>
>
> --
> Jakob Andersen
> http://www.stresscd.dk/ - Udnyt stress positivt
>
>



Nis Jørgensen (05-08-2002)
Kommentar
Fra : Nis Jørgensen


Dato : 05-08-02 10:43

On Sat, 3 Aug 2002 18:51:11 +0200, "Soren Staun Jorgensen"
<ssj(at)cadeye(dot)dk> wrote:

>
>
>Kan man lave noget lign dette :
>
>CREATE PROCEDURE proc
>(
> @FirmaId int = -1
>)
>AS
>
>SELECT
> Id,
> FirmaId,
> Navn,
> Beskrivelse
>FROM personer
>WHERE ( IF( @FirmaId = -1 ) FirmaId = ANY( SELECT DISTINCT Id FROM firmaer )
>ELSE FirmaId = @FirmaId )
>
>- altså; hvis @FirmaId er lig -1 ( default ) returneres alle personer og
>hvis @FirmaId er lig et andet tal returneres kun de records hvor kriteriet
>passer.

Hvad med

WHERE @FirmaId = -1 OR FirmaId = @FirmaId

(det er ikke helt det samme - men hvis FirmaID altid henviser til en
række i firmaer er resultatet det samme)

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Ukendt (05-08-2002)
Kommentar
Fra : Ukendt


Dato : 05-08-02 11:53

Hej Nis,

Duer ikke da Id på firmaer er identity, og -1 derfor ikke findes.

Svaret må være dynamisk SQL

Søren



"Nis Jørgensen" <nis@dkik.dk> skrev i en meddelelse
news:gvhskuossk9d31ak5qjidvoob323c7uedt@4ax.com...
> On Sat, 3 Aug 2002 18:51:11 +0200, "Soren Staun Jorgensen"
> <ssj(at)cadeye(dot)dk> wrote:
>
> >
> >
> >Kan man lave noget lign dette :
> >
> >CREATE PROCEDURE proc
> >(
> > @FirmaId int = -1
> >)
> >AS
> >
> >SELECT
> > Id,
> > FirmaId,
> > Navn,
> > Beskrivelse
> >FROM personer
> >WHERE ( IF( @FirmaId = -1 ) FirmaId = ANY( SELECT DISTINCT Id FROM
firmaer )
> >ELSE FirmaId = @FirmaId )
> >
> >- altså; hvis @FirmaId er lig -1 ( default ) returneres alle personer og
> >hvis @FirmaId er lig et andet tal returneres kun de records hvor
kriteriet
> >passer.
>
> Hvad med
>
> WHERE @FirmaId = -1 OR FirmaId = @FirmaId
>
> (det er ikke helt det samme - men hvis FirmaID altid henviser til en
> række i firmaer er resultatet det samme)
>
> --
> Nis Jørgensen
> Amsterdam
>
> Please include only relevant quotes, and reply below the quoted text.
Thanks



Nis Jørgensen (05-08-2002)
Kommentar
Fra : Nis Jørgensen


Dato : 05-08-02 14:39

On Mon, 5 Aug 2002 12:52:37 +0200, "Soren Staun Jorgensen"
<ssj(at)cadeye(dot)dk> wrote:

>
>Duer ikke da Id på firmaer er identity, og -1 derfor ikke findes.

Men jeg tester på parametren, og ikke på feltet i tabellen. Jeg kender
ikke meget til MSSQL server, men jeg kan ikke forestille mig at mit
forslag ikke virker. Har du prøvet det?

>Svaret må være dynamisk SQL

Det kan garanteret også gøres på den måde.

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Ukendt (05-08-2002)
Kommentar
Fra : Ukendt


Dato : 05-08-02 16:43

Hej Nis,

Upps - det havde jeg lige overset, sorry !

Og, ja - du har ret det virker faktisk - tak

Søren


"Nis Jørgensen" <nis@dkik.dk> skrev i en meddelelse
news:74vsku8k4ltrnkkuc38ms56ef4p1gttfob@4ax.com...
> On Mon, 5 Aug 2002 12:52:37 +0200, "Soren Staun Jorgensen"
> <ssj(at)cadeye(dot)dk> wrote:
>
> >
> >Duer ikke da Id på firmaer er identity, og -1 derfor ikke findes.
>
> Men jeg tester på parametren, og ikke på feltet i tabellen. Jeg kender
> ikke meget til MSSQL server, men jeg kan ikke forestille mig at mit
> forslag ikke virker. Har du prøvet det?
>
> >Svaret må være dynamisk SQL
>
> Det kan garanteret også gøres på den måde.
>
> --
> Nis Jørgensen
> Amsterdam
>
> Please include only relevant quotes, and reply below the quoted text.
Thanks



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste