Avatar billede peterlang Nybegynder
16. november 2002 - 03:39 Der er 6 kommentarer og
2 løsninger

Dynamisk ORDER BY i SP virker ikke

Hvorfor virker den ikke?
Jeg får denne fejlmedelse: "if the SELECT statement contains a UNION operator, the sort columns must appear in the select list"

CREATE PROCEDURE test
(@OrderBy    int)
As

SELECT land, landus  FROM land WHERE landid>0
UNION all
SELECT  land, landus  FROM land WHERE landid>0
ORDER BY Case @OrderBy
WHEN 1 Then cast(land AS sql_variant)
WHEN 2 Then cast(landus AS sql_variant)
End
GO


Peter Lang
Avatar billede bennytordrup Nybegynder
16. november 2002 - 12:46 #1
Hvorfor vil du have den union med?

Begge de statements, du laver union på, returnerer nøjagtig det samme, så vidt jeg kan se.

Drop den ene select og den der union all.
Avatar billede arne_v Ekspert
16. november 2002 - 17:09 #2
Fact:
  * ved UNION skal ORDER BY være til sidst og gælde de hele
  * ORDER BY feltet skal være i select list

[svarer til fejl-meddelelsen]

Gæt:
  MS SQLServer lader sig forvirre af din ORDER BY
  expression og mener ikke at den "er" i select list
Avatar billede arne_v Ekspert
16. november 2002 - 17:13 #3
Og umiddelbart vil jeg tro, at den nemmeste løsning
var at have 2 SELECT statemenst of en IF. Altså
noget i stil med:

IF @OrderBy = 1
    SELECT ... ORDER BY ...
ELSE
IF @OrderBy = 2    SELECT ... ORDER BY ...
Avatar billede ocp Nybegynder
16. november 2002 - 18:08 #4
Jeg foreslår:

CREATE PROCEDURE test
(@OrderBy    int)
As

execute('
SELECT land, landus  FROM land WHERE landid>0
UNION all
SELECT  land, landus  FROM land WHERE landid>0
ORDER BY ' + Case @OrderBy
WHEN 1 Then cast(land AS sql_variant) )
WHEN 2 Then cast(landus AS sql_variant)
End
GO
Avatar billede ocp Nybegynder
16. november 2002 - 18:08 #5
Ups parentesen blev sat forkert:


CREATE PROCEDURE test
(@OrderBy    int)
As

execute('
SELECT land, landus  FROM land WHERE landid>0
UNION all
SELECT  land, landus  FROM land WHERE landid>0
ORDER BY ' + Case @OrderBy
WHEN 1 Then cast(land AS sql_variant)
WHEN 2 Then cast(landus AS sql_variant)
)
End
GO
Avatar billede peterlang Nybegynder
16. november 2002 - 20:48 #6
Perfekt, begge løsninger virker, men jeg vælger løsning nr. 2,
så man ikke skal gentage sig selv...

Tak
Peter Lang
Avatar billede bennytordrup Nybegynder
16. november 2002 - 23:44 #7
Lukker du spørgsmålet?
Avatar billede peterlang Nybegynder
17. november 2002 - 00:27 #8
Hov, jeg har glemt at lukke!!!
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