/ 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
[MS SQL 2000] Sorterinngsproblem
Fra : Stefan Kristensen


Dato : 08-02-05 13:19

Hej NG.

Jeg har følgende procedure:

CREATE PROCEDURE GetRequestList
@UserID varchar(8),
@Type varchar(16), -- Outstanding / Initiated Requests: User / Requestor
@Closed varchar(1), -- Show Closed Requests: Y / N
@SortColumn varchar(16),
@SortOrder varchar(3)
AS
CREATE TABLE #RequestList(RequestID varchar(32), [Action] int, UserName
varchar(50), OUDescr varchar(254), State int, Created datetime, Closed
datetime)
<snip>En masse kode, der fylder #RequestList med data fra andre tabeller
</snip>
SELECT * FROM #RequestList AS rl
ORDER BY CASE
WHEN @SortColumn = 'action' THEN rl.[Action]
WHEN @SortColumn = 'userName' THEN rl.UserName
WHEN @SortColumn = 'orgUnit' THEN rl.OUDescr
WHEN @SortColumn = 'state' THEN rl.State
WHEN @SortColumn = 'created' THEN rl.Created
ELSE rl.Closed
END ASC

Hvis jeg angiver SortColumkn som enten 'action' eller 'state' som begger er
int, virker det fint. Hvis jeg ikke angiver noget fra listen defaulter den
til 'closed'; det virker også fint. Angiver jeg noget andet fra listen end
'action' og 'state' får jeg følgende fejl:
Server: Msg 241, Level 16, State 1, Procedure GetRequestList, Line 51
Syntax error converting datetime from character string.
Hvor linie 51 er SELECT * FROM #RequestList AS rl

Hvad gør jeg forkert og hvordan får jeg det til at virker?

Mvh
Stefan



 
 
Jens Gyldenkærne Cla~ (08-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 08-02-05 13:40

Stefan Kristensen skrev:

> Syntax error converting datetime from character string.
> Hvor linie 51 er SELECT * FROM #RequestList AS rl
>
> Hvad gør jeg forkert og hvordan får jeg det til at virker?

Det ser ud til at dit ORDER BY-udtryk kun må have én mulig datatype - og
den bliver valgt til datetime ud fra de tilgængelige parametre (er
Closed et datetimefelt?)

Prøv at caste til varchar alle steder. Det kan så give problemer med
sorteringsrækkefølgen, men datoværdierne kan konverteres til et format
som også kan sorteres alfabetisk (fx yyyymmddThhmmss), og for
talværdierne kan man måske gøre det samme ved først at konvertere til en
dato og herefter til samme datoformat som ovenfor.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Stefan Kristensen (08-02-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 08-02-05 13:49

> > Syntax error converting datetime from character string.
> > Hvor linie 51 er SELECT * FROM #RequestList AS rl
>
> Det ser ud til at dit ORDER BY-udtryk kun må have én mulig datatype - og
> den bliver valgt til datetime ud fra de tilgængelige parametre (er
> Closed et datetimefelt?)
>
> Prøv at caste til varchar alle steder. Det kan så give problemer med
> sorteringsrækkefølgen, men datoværdierne kan konverteres til et format
> som også kan sorteres alfabetisk (fx yyyymmddThhmmss), og for
> talværdierne kan man måske gøre det samme ved først at konvertere til en
> dato og herefter til samme datoformat som ovenfor.

Jeg caster til varchar og så virker det. Men du har fuldstændig ret:
Datoerne bliver sorteret underligt.
Jeg ser lidt nærmere på muligheder med cast. Tak for din hjælp

Mvh
Stefan



Jens Gyldenkærne Cla~ (08-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 08-02-05 14:04

Stefan Kristensen skrev:

> Jeg caster til varchar og så virker det. Men du har fuldstændig ret:
> Datoerne bliver sorteret underligt.

Brug CONVERT i stedet:

   convert(varchar(30), datofelt, 126)

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Stefan Kristensen (08-02-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 08-02-05 14:15

> > Jeg caster til varchar og så virker det. Men du har fuldstændig ret:
> > Datoerne bliver sorteret underligt.
>
> Brug CONVERT i stedet:
>
> convert(varchar(30), datofelt, 126)

Sådan skal dét får barberes. Det hele virker som det skal.
Tak igen for din hjælp

Mvh
Stefan



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

Månedens bedste
Årets bedste
Sidste års bedste