2010-11-28 6 views
3

Je souhaite nommer dynamiquement des colonnes dans une requête basée sur le choix d'un paramètre par les utilisateurs. Mon idée était que selon le choix des utilisateurs, la colonne serait nommée via le "As" qui vient après la spécification de colonne/champ.Puis-je utiliser Functions/expressions pour nommer une colonne via l'instruction "As" dans T-SQL?

Voici mon exemple:

Select Distinct 

Case @DateParam 

When 'Created' Then Convert(Varchar, h.wmhd_cre_date, 101) 

When 'Action' Then Convert(Varchar, d.wmdt_date, 101) 

End As CONCATENATE(@DateParm + 'Date'), 

Donc, si l'utilisateur a sélectionné le paramètre pour le « créé » la date, l'en-tête de la colonne montrerait « CreatedDate ». Mais s'ils ont sélectionné le paramètre pour la date "Action", la colonne s'appellera "ActionDate".

J'ai déjà essayé de faire des choses similaires et je commence à comprendre que vous ne pouvez pas mettre d'expressions après une instruction "As". Est-ce vrai, ou est-ce que quelqu'un a des idées?

Répondre

2

C'est exact. Un identifiant aliasé ne peut pas être généré via une expression.

Vous pouvez faire quelque chose comme ça, mais:

SELECT DISTINCT 
    CASE WHEN @DateParam = 'Created' THEN CONVERT(varchar, h.wmhd_cre_date, 101) END AS CreatedDate, 
    CASE WHEN @DateParam = 'Action' THEN CONVERT(varchar, h.wmdt_date, 101) END AS ActionDate 

Si vous devez absolument retourner les colonnes de la façon originale que vous avez décrit, vous devez utiliser SQL dynamique (par exemple, EXEC ou EXEC sp_executesql)

+0

Phil, Merci pour le conseil! Je pensais que j'avais essayé ce que vous avez suggéré ci-dessus à un moment donné dans le passé, mais je dois avoir mal fait. Puisque j'ai déjà la construction "Case" en place, votre option semble être un match parfait. –

+0

Glad cela a aidé! –

1

utilisation EXEC passant dans la requête comme string.Example:

declare @fnameParam varchar(50) 
set @fnameParam = 'FirstName' 
EXEC 'SELECT FName AS ' + @fnameParam + ' FROM Table1' 
+0

Oh, c'est juste la supercherie que j'aime. Merci pour cette connaissance Ali ... Je vais l'utiliser sagement et souvent. –