9
votes

SQL Server 2008 Select * à partir de @Variable?

C'est possible? XXX

J'ai cette erreur:

msg 1087, niveau 16, état 1, ligne 3 doit déclarer la variable de tableau "@vtablename".


3 commentaires

Non, ce n'est pas possible comme vous l'essayez. Vous aurez probablement des réponses à l'aide de Dynamic SQL.


duplicaté possible de Sélection d'une table où Le nom est passé comme une variable


Pourriez-vous nous en dire plus sur pourquoi vous voulez faire cela?


6 Réponses :


3
votes

Si vous essayez de choisir parmi une table de ce nom, vous pouvez faire quelque chose comme ceci:

DECLARE @vTableName varchar(50) 
SET @vTableName = (SELECT TableName FROM qms_Types WHERE Id = 1) 
EXECUTE('SELECT * FROM [' + @vTableName + ']')


3 commentaires

Non, OP tente d'obtenir de manière dynamique des données d'une table définie par une variable. Ne pas simplement essayer de retourner la valeur de cette variable.


OP tente de définir le nom de la table, puis de sélectionner des données dans la table, pas de sélectionner le nom de la table.


Votre propre édition invalide votre réponse, car la variable @vtablename est pas une variable de table; C'est un varchar (50) .



19
votes

Réponse courte: non.

Bonne réponse: NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. Utilisez Dynamic SQL si vous devez, mais si vous structurez vos tables d'une manière où vous ne connaissez pas le nom de la table à l'avance, cela pourrait vous permettre de repenser votre schéma.

Voici une excellente ressource pour apprendre à utiliser Dynamic SQL: La malédiction et les bénédictions de SQL dynamique


0 commentaires

1
votes

Je pense que vous voulez que cela:

DECLARE @vTableName table(TableName varchar(50))

insert into @vTableName 
SELECT TableName FROM qms_Types WHERE Id = 1

SELECT * FROM @vTableName


2 commentaires

Cette requête renvoie mon nom de table, pas le contenu de ma table :(


Il retournera le contenu de la colonne Nom. Qu'est-ce que tu veux faire?



1
votes

La seule façon dont vous pouvez le faire est via SQL dynamique qui fait référence à la pratique de la création d'un texte T-SQL et de l'exécuter à l'aide du sp_executesql (ou simplement exec )

Voici un lien utile sur Dynamic SQL La malédiction et les bénédictions de SQL dynamique .

Vous devriez vraiment penser s'il s'agit ou non d'une affaire de SQL dynamique ou s'il y a une autre façon pour vous d'effectuer cette opération.


0 commentaires

1
votes

Ma solution pour cela:

EXECUTE('SELECT * FROM  ' + TableName + '')


0 commentaires

2
votes

Il semble que différentes personnes interprètent différemment l'OP différemment.

Je suis à peu près sûr que l'OP demande ce type de concept / capacité / manœuvre ...

"Mettez une table Nom dans une variable puis utiliser cette variable comme s'il s'agissait d'un nom de table. " xxx

de lecture de toutes les réponses et réponses, il apparaît que ce type de manœuvre peut" t être fait - sauf si vous utilisez SQL dynamique qui ...

  • peut être un peu de douleur à créer et à entretenir et
  • peut être plus de travail à créer que le temps qu'il "vous sauve" à l'avenir.

    =========================================== ======================

    Il y a Autres langues Où cela peut être fait ... dans littéralement, Deux lignes de code (voir (L1) et (L2) dans le code ci-dessus) et ne doivent pas avoir à faire beaucoup de formatage et d'édition.)

    (Je l'ai déjà fait avant - il y a une autre langue où Tout ce dont vous auriez besoin est L1 et L2 ...)

    =============================== ==================================

    Il est malheureux que SQL Server ne fasse pas Cela sans aller à une quantité décente d'effort ...

    • d'abord écrire votre SQL puis
    • Testez-le pour vous assurer qu'il fait, en fait, travail alors
    • encadrer chaque ligne avec des tiques, puis échappez à vos tiques qui sont maintenant à l'intérieur de ces tiques
    • Déclarez la variable
    • Définissez la variable de l'instruction SQL que vous avez cochée ci-dessus
    • (il se manque peut-être quelques étapes supplémentaires)
    • Oh, puis, si vous avez besoin de le maintenir
    • Vous avez besoin de soit, soyez très prudent et simplement à le modifier ici, comme vous l'avez, et j'espère que vous obtiendrez tout simplement à droite - vous avez peut-être sauvegardé une copie ... non coché et non viablized Donc, vous pouvez éditer le «réel» SQL, puis lorsque vous avez terminé, vous pouvez faire ces étapes ... à nouveau.

0 commentaires