kolmapäev, 12. september 2012

SQL SERVER SELECT päringu parametriseeritud järjestamine erinevate andmetüüpide korral

Andmebaasi tabelis on väli text_id INT tüüpi ja title_text NVARCHAR(1000).
Kui nüüd vaja salvestatud protseduuris parameetrina ette anda mis järjestuses andmeid kätte saada tahetakse


ALTER PROCEDURE [dbo].[TEXT_ROLES_KUIDO_S]
    @sortorder TINYINT=0 --0 NIME JÄRGI 1-ID JÄRGI
AS
BEGIN
SET NOCOUNT ON
   SELECT [text_id],[title_text] FROM [dbo].[TEXT_TITLES]
            ORDER BY CASE WHEN @sortorder = 0 THEN title_text ELSE text_id END
END

siis selline lähenemine annab veateate @sortorder = 0 korral

Conversion failed when converting the nvarchar value 'Mingi tekst' to data type int.

kuna title_text-i hakatake INT andmetüübiks pöörama. Veast saab lahti, kui ORDER BY kirjutada järgmiselt

   SELECT [text_id],[title_text] FROM [dbo].[TEXT_TITLES]
      ORDER BY CASE WHEN @sortorder = 0 THEN title_text END ,
                     CASE WHEN @sortorder = 1 THEN text_id END