Avatar billede Syska Mester
23. juni 2008 - 16:58 Der er 5 kommentarer og
1 løsning

Extend procedure SELECT statement

Hi,

Det er egentlig simpelt nok ... jeg har en stored procedure som tager nogle argumenter ... nogle af disse argumenter bliver brugt i WHERE delen af min select ...

Problemet at at det ikke er altid disse skal med ... så den eneste løsning jeg har kunne få til at virke, er at teste om input er NULL, og så derefter være 100% sikker på at værdien enten er lav eller høj nok til at få alle rows med ...

Er dette eneste løsning ? Jeg ville egentlig helst gerne bare kunne extend min WHERE clause ... men synes ikke rigtig jeg kan få noget til at virke ... ( min fremgangs måde har været noget ala det sammen som man ville gøre i .NET )

Jeg ved så man kan lave en .NET Stored Procedure, men er der ikke performance hit i det? Og derefter er det jo også lidt mere besværligt at vedlige holde dem, da man så skal ind i VS, recompile, og smide ind igen ... her er det hele jo nemt at se hvad der præcis sker ....

// oUT
Avatar billede arne_v Ekspert
23. juni 2008 - 17:18 #1
maaske kan du bruge:

WHERE felt = ISNULL(@arg, felt)
Avatar billede arne_v Ekspert
23. juni 2008 - 17:23 #2
Jeg vil forvente en .NET SP at vaere hurtigere til "programmering" og langsommere til "SQL" i forhold til en TSQL SP.
Avatar billede Syska Mester
23. juni 2008 - 17:36 #3
Jeg kan desvære ikke lige følge dig der ... enten er mit problem ikke forklaret godt nok eller også har du misforstået det ...

Men ISNULL er nice ... kendte jeg ik'.

Men til sagen igen....

SELECT ID, Name FROM table1
WHERE Name = @p0 ID => @p1 AND ID =< @p2

Hvis jeg nu ikke ønsker de sidste 2 ting med ... så skal jeg jo lave en helt ny query og bare have:
SELECT ID, Name FROM table1
WHERE Name = @p0

Det jeg ønsker er at kunne extend min query til at indeholde at ID måske kan være over, under eller mellem en given værdi, hvis de parameters til min query er angivet.

Men det synes jeg bliver til en del quries i min Procudure ....

jeg er også ved at overveje om det er korrekt at prøve at implementere det som SP ... og man måske ikke bare skulle bruge SQL fra .NET
Avatar billede arne_v Ekspert
23. juni 2008 - 17:41 #4
SELECT ID, Name FROM table1
WHERE Name = ISNULL(@p0,Name) AND ID => ISNULL(@p1,0) AND ID =< ISNULL(@p2,2147483647)
Avatar billede Syska Mester
23. juni 2008 - 17:54 #5
Så er vi jo også faktisk tilbage hvor jeg startede ... dog med forbedringer.

Men jeg kan godt se hvad du mener nu ... jeg skulle lige vide at du stadig ville have alle WHERE med i min main query, og ikke prøvede at fjerne dem, som egentlig var hvad jeg søgte ...

Men det vil et eller andet sted vel også være den hurtigste, da jeg så stadig kan styre hvordan indexes skal bruges, da jeg 100% har styr om WHERE række følgende ... og hurtig ville kunne se hvis den ikke bruger dem.

Tror gerne du må smide et svar.

// ouT
Avatar billede arne_v Ekspert
24. juni 2008 - 01:11 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester