/ 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
Order by i en stored procedure.
Fra : sandy


Dato : 12-02-01 14:54

Hej,

Kan jeg lave en "order by" via en stored procedure, hvor jeg fortæller med parametere til min stored procedure, hvad der skal sorteres efter? Hvis ja, Hvordan?

Jeg bruger MS SQL.

Sandy


Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


 
 
Kristian Damm Jensen (12-02-2001)
Kommentar
Fra : Kristian Damm Jensen


Dato : 12-02-01 15:35

sandy wrote:
>
> Hej,
>
> Kan jeg lave en "order by" via en stored procedure, hvor jeg fortæller med parametere til min stored procedure, hvad der skal sorteres efter? Hvis ja, Hvordan?
>
> Jeg bruger MS SQL.

create procedure test
@sort varchar(30)
as
exec ("select * from tabel " + @sort)

--
Kristian Damm Jensen | Feed the hungry. Go to
kristian-damm.jensen@capgemini.dk | http://www.thehungersite.com



James Olsen (12-02-2001)
Kommentar
Fra : James Olsen


Dato : 12-02-01 18:22


"Kristian Damm Jensen" <kristian-Damm.Jensen@REMOVEcapgemini.dk> wrote in
message news:3A87F23F.5AFBF923@REMOVEcapgemini.dk...
> sandy wrote:
> >
> > Hej,
> >
> > Kan jeg lave en "order by" via en stored procedure, hvor jeg fortæller
med parametere til min stored procedure, hvad der skal sorteres efter? Hvis
ja, Hvordan?
> >
> > Jeg bruger MS SQL.
>
> create procedure test
> @sort varchar(30)
> as
> exec ("select * from tabel " + @sort)

Så skylder du lige at fortælle at dette faktisk resultere i dårligere
performance end at sende en select direkte, hvis altså proceduren ikke gør
væsentligt andre ting.




>
> --
> Kristian Damm Jensen | Feed the hungry. Go to
> kristian-damm.jensen@capgemini.dk | http://www.thehungersite.com
>
>



Kristian Damm Jensen (13-02-2001)
Kommentar
Fra : Kristian Damm Jensen


Dato : 13-02-01 10:10

James Olsen wrote:
>
> "Kristian Damm Jensen" <kristian-Damm.Jensen@REMOVEcapgemini.dk> wrote in
> message news:3A87F23F.5AFBF923@REMOVEcapgemini.dk...
> > sandy wrote:
> > >
> > > Hej,
> > >
> > > Kan jeg lave en "order by" via en stored procedure, hvor jeg fortæller
> med parametere til min stored procedure, hvad der skal sorteres efter? Hvis
> ja, Hvordan?
> > >
> > > Jeg bruger MS SQL.
> >
> > create procedure test
> > @sort varchar(30)
> > as
> > exec ("select * from tabel " + @sort)
>
> Så skylder du lige at fortælle at dette faktisk resultere i dårligere
> performance end at sende en select direkte, hvis altså proceduren ikke gør
> væsentligt andre ting.

Det kunne jeg selvfølgelig godt have skrevet, men da det er den eneste
løsning på det stillede problem, tænkte jeg ikke lige over også at
overveje performance.

Rent bortset fra at jeg ikke var opmærksom på det - jeg har aldrig brugt
denne konstruktion i praksis. Er der nogen der ved *hvorfor* det giver
*væsentlig* dårligere performance?

--
Kristian Damm Jensen | Feed the hungry. Go to
kristian-damm.jensen@capgemini.dk | http://www.thehungersite.com



gandalf (13-02-2001)
Kommentar
Fra : gandalf


Dato : 13-02-01 12:15

Hej Kristian,

Grunden til det giver dårligere performance, er fordi normalt er en stored procedure precompileret, dvs. den skal ikke compiles hver gang den bliver kaldt.
Ved at køre en "exec" inde i en stored procedure sørger for at din stored procedure skal fortolkes hver gang.

Med hensyn til at en order by ikke kan laves på anden måde, er dette ikke helt korrekt, hvis du fortæller hvad feltnr du vil sortere efter istedet :

CREATE PROCEDURE OrderProc @ordercol int AS
select * from a
order by case
when @ordercol=1 then felt1
when @ordercol=2 then felt2
else felt3
end

>>Gandalf


Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


Kristian Damm Jensen (13-02-2001)
Kommentar
Fra : Kristian Damm Jensen


Dato : 13-02-01 14:41

gandalf wrote:
>
> Hej Kristian,
>
> Grunden til det giver dårligere performance, er fordi normalt er en stored procedure precompileret, dvs. den skal ikke compiles hver gang den bliver kaldt.
> Ved at køre en "exec" inde i en stored procedure sørger for at din stored procedure skal fortolkes hver gang.

Dette er en sammenligning mellem "exec" og en direkte sql, begge dele i
en SP. Her er jeg udmærket klar over, at der er en performancefaktor.

Men som jeg opfattede svaret på mit indlæg, var det en påstand om, at en
sql-forespørgsel eksekveret gennem exec i en sp er væsentligt
langsommere end den samme sql udført direkte på basen (gennem en prompt
eller et passende interface fra fx VB). Er dette korrekt, og givet fald,
hvorfor?

> Med hensyn til at en order by ikke kan laves på anden måde, er dette ikke helt korrekt, hvis du fortæller hvad feltnr du vil sortere efter istedet :
>
> CREATE PROCEDURE OrderProc @ordercol int AS
> select * from a
> order by case
> when @ordercol=1 then felt1
> when @ordercol=2 then felt2
> else felt3
> end

Ah, jeg havde glemt fordelene ved "case".


--
Kristian Damm Jensen | Feed the hungry. Go to
kristian-damm.jensen@capgemini.dk | http://www.thehungersite.com



Stefan Kristensen (12-03-2001)
Kommentar
Fra : Stefan Kristensen


Dato : 12-03-01 13:24


"gandalf" <gandalf.news@kandu.dk> wrote in message
news:_G8i6.54571$zw.973205@twister.sunsite.dk...
....
> CREATE PROCEDURE OrderProc @ordercol int AS
> select * from a
> order by case
> when @ordercol=1 then felt1
> when @ordercol=2 then felt2
> else felt3
> end
....

Det løste jo også lige mit problem
Hvordan kan ovennævnte udvides med et valg af sorteringsrækkefølgen
(asc/desc)?

mvh
Stefan



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

Månedens bedste
Årets bedste
Sidste års bedste