SQL: Select dynamique de la colonne nom basé sur la variable

J'ai un Microsoft SQL procédure stockée dont le nom de la colonne que je veux régler via une variable qui est passée dans il:

CREATE PROCEDURE [My_Procedure]
   @myDynamicColumn varchar(50)
AS BEGIN
   SELECT 'value' AS @myDynamicColumn
END

Cela ne fonctionne pas ("syntaxe Incorrecte"). Si j'enveloppe le nom de la colonne avec [ ]:

SELECT 'value' AS [@myDynamicColumn]

Le nom de la colonne littéralement sorties '@myDynamicColumn " au lieu de la valeur réelle. Est-il possible de faire cela? J'ai regardé dans le code SQL dynamique d'articles, mais rien n'est tout à fait ce que je vous demande.

  • Pourquoi? Ce n'est pas la façon dont SQL doit être utilisé
  • à droite sur. @dotNewkow: je suis sûr que c'est juste un exemple artificiel pour illustrer votre question, mais gbn est correct: c'est complexe à cause de son mal. Si vous avez besoin de faire un alias d'un retour de la procédure stockée, puis tout simplement l'aliasing dans le code appelant, où manifestement, vous connaissez déjà la valeur de @myDynamicColumn. Si vous publiez plus de détails au sujet de votre problème peut-être que nous pouvons offrir plus de sql dynamique.
  • Bonne question. Oui, je comprends bien les dangers du SQL dynamique. @Nathan Skerl, vous avez raison, normalement, vous voulez définie par le code appelant. Cependant, je suis à l'exécution de cette requête comme une connexion de données dans Excel à des fins de reporting. Le Client veut 4 rapports avec relativement les mêmes données, mais avec différents noms de colonne, donc j'ai fait une procédure stockée pour la réutilisabilité & suivre le principe DRY. Si c'était un vue sur, je pourrais faire: "SÉLECTIONNEZ [colonne] en tant QUE [Ma Dynamique de la colonne nom] DE [Mon avis]" mais comme c'est une procédure stockée je ne peux le faire "EXEC My_Procedure" Mon Nom de Colonne'".
  • SEC serait d'alias dans le client et de garder le SQL contrat identique. Ce n'est pas un problème SQL. SECS, on peut aussi dire en utilisant le même nom de toute façon. Avoir 4 noms pour un attribut est source de confusion...
  • Comment sur la modification de la procédure à prendre en @ReportId et puis à l'intérieur de la procédure imiter ce que vous feriez dans la vue... c'est à dire, SI @ReportId = 1, puis sélectionnez "valeur" comme [MyDynamicColumn] else if @ReportId = 2 ... Au moins vous n'avez pas à prendre les bagages de sql dynamique. Pour un petit nombre de rapports/en-têtes de colonne, je voudrais aller dans cette voie.
  • Skerl: Merci, j'aime bien cette approche. Beaucoup mieux.

InformationsquelleAutor dotNetkow | 2011-04-12