webForumDet fria alternativet

Deklarera variabler i SP...

10 svar · 337 visningar · startad av JAreMANNEN

JAreMANNENMedlem sedan aug. 20002 272 inlägg
#1
CREATE PROCEDURE sp_GetRisRos
@superuserid int,
@order
AS
SELECT * FROM RisRos
INNER JOIN Medlem
ON RisRos.MedlemsId = Medlem.MedlemsId
WHERE Medlem.Superuser = @superuserid
ORDER BY @order

Får fel att @order måste "deklareras".. :(

Har prövat lite olika sätt men får det inte till att fungera!!

@order kommmer att innehålla t.ex "Datum", "Rubrik" osv...

THX!

erkaMedlem sedan dec. 19996 522 inlägg
#2

order har du ju inte deklarerat typ på

erkaMedlem sedan dec. 19996 522 inlägg
#3

@order varchar(20)

JAreMANNENMedlem sedan aug. 20002 272 inlägg
#4

som sagt, har provat en del sätt, även det du föreslog, fortfarande fel..

JAreMANNENMedlem sedan aug. 20002 272 inlägg
#5

Error 1008: The SELECT item identified by the ORDER BY number 1 contains a variable as part of the expression identifying a column position. Variables are only allowed when ordering by an expression referencing a column name

DÄR är felmesset SQL Server...

EDIT: Fast nu var det inget "must declare.." fel.. :o

erkaMedlem sedan dec. 19996 522 inlägg
#6

Kör ett case då på den variabel du tar in i order

CREATE PROCEDURE sp_GetRisRos
@superuserid int,
@order varchar(50)
AS
SELECT * FROM RisRos
INNER JOIN Medlem
ON RisRos.MedlemsId = Medlem.MedlemsId
WHERE Medlem.Superuser = @superuserid
ORDER BY

select case @order
when 'MyDate' then TblKlmDatum
when 'Header' then TblKlmHEader
end

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Alla resultaten i case måste vara av samma type

CREATE PROCEDURE sp_GetRisRos 
@superuserid int, 
@order varchar(50) 
AS 
SELECT * FROM RisRos 
INNER JOIN Medlem 
ON RisRos.MedlemsId = Medlem.MedlemsId 
WHERE Medlem.Superuser = @superuserid 
ORDER BY 
case @order 
when 'MyDate' then cast(TblKlmDatum as varchar)
when 'Header' then TblKlmHEader 
end
erkaMedlem sedan dec. 19996 522 inlägg
#8

LarsG, exakt vad gör Cast raden förstår inte den riktigt.

JAreMANNENMedlem sedan aug. 20002 272 inlägg
#9

gr8, du är en klippa LarsG ;)

JAreMANNENMedlem sedan aug. 20002 272 inlägg
#10

förresten, om jag vill ha ORDER BY TblKlmDatum desc... Vart ska det in isf??

LarsGMedlem sedan dec. 200012 464 inlägg
#11
CREATE PROCEDURE sp_GetRisRos @superuserid int, @order varchar(50) AS 
SELECT * FROM RisRos INNER JOIN Medlem ON RisRos.MedlemsId = Medlem.MedlemsId 
WHERE Medlem.Superuser = @superuserid ORDER BY case @order 
when 'MyDate' then cast(TblKlmDatum as varchar)
else 'a' end desc,
case @order when 'header' then TblKlmHEader else '1' end

cast konverterar från en datatyp till en annan.

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)