Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


T-sql variabler för exempelvis sortering

Postades av 2003-03-05 10:27:30 - Andreas Olausson, i forum sql-server/msde, Tråden har 4 Kommentarer och lästs av 721 personer

Tänkte bara dubbelkolla, misstänker att det inte går :-(

Om man har en enkel query som denna i en stored procedure:

<code>
SELECT fält1, fält2 FROM Tabell ORDER BY fält1 DESC
</code>

Finns det någon möjlighet att skicka in en variabel som säger vilken sorteringsordning man vill ha?

Jag vill mao byta ut DESC mot en variabel så det blir så här:

<code>
SELECT fält1, fält2 FROM Tabell ORDER BY fält1 @stororder
</code>

Just detta funkar ju inget vidare, funkar ju inte alls faktiskt. ;-)

Det är förvisso inget större problem om det bara är sorteringen man vill åt men man kanske vill välja vilket fält det ska sorteras med dessutom och man har ett gäng fält då blir det mycket...

ex
fält1 asc
fält1 desc
fält2 asc
fält2 desc
fält3 asc
fält3 desc
osv osv...

Finns det något sätt att lösa det på förutom en väldans massa vilkorssatser i proceduren?


Svara

Sv: T-sql variabler för exempelvis sortering

Postades av 2003-03-05 13:14:11 - Christoffer Hedgate

Det går alldeles utmärkt att göra det. Man får dock trixa lite. Det här exemplet borde förklara:

<code>
use northwind

declare @sort int
set @sort = 1

select * from orders
order by
case when @sort = 1 then customerid else null end asc
, case when @sort = 2 then customerid else null end desc
, case when @sort = 3 then orderdate else null end asc
, case when @sort = 4 then orderdate else null end desc
</code>


Svara

Sv: T-sql variabler för exempelvis sortering

Postades av 2003-03-05 13:19:52 - Andreas Olausson

Tackar så mycket...
Var det så enkelt, ska genast sätta igång och trixa :)


Svara

Sv: T-sql variabler för exempelvis sortering

Postades av 2003-03-05 23:28:20 - Andreas Hillqvist

Är det inte bättre att skriva:

<code>
declare @sort int
set @sort = 1

IF @sort = 1
SELECT * FROM orders ORDER BY customerid ASC
ELSEIF @sort = 2
SELECT * FROM orders ORDER BY customerid DESC
ELSEIF @sort = 3
SELECT * FROM orders ORDER BY orderdate ASC
ELSEIF @sort = 4
SELECT * FROM orders ORDER BY orderdate DESC


Eller optimerar SQL motorn frågan?


Svara

Sv: T-sql variabler för exempelvis sortering

Postades av 2003-03-06 08:32:34 - Christoffer Hedgate

Det tycker jag inte. Det är egentligen ingenting att optimera, eftersom det är ändå själva sorteringen som tar tid och resurser att utföra, den blir ju exakt densamma i vilket fall som helst. Den enda skillnaden i exekveringsplanen är istället en liten Compute Scalar operation för mitt förslag där den gör om CASE-satsen till ett IF-uttryck internt, men det kommer aldrig att påverka prestandan överhuvudtaget. Tvärtom så kan en procedur som utför olika frågor beroende på någon variabel (med IF-satser som i ditt exempel, dock finns ej ELSEIF utan man får nästla dem) få svårigheter att återanvända exekveringsplaner. Måste dessa kompileras om ofta blir prestandan definitivt lidande i ditt exempel.

Men huvudanledningen till att jag inte tycker man ska göra så är att det är otympligt. Nu var ju detta en väldigt enkel liten SQL-sats, men om det är en riktigt stor och komplicerad fråga blir det mycket oöverskådlig kod om samma fråga (förutom sorteringen då) upprepas flera gånger i en procedur. För att inte tala om att det är jobbigt att hålla på och duplicera kod sådär och man riskerar att göra en miss nånstans. Ska man ändå duplicera och göra en massa villkorstester kan man isf dessutom göra det i applikationen och bara skicka den fråga man är intresserad av.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
5 788
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies