L'Évolution dynamique de ce tableau pour sélectionner à partir avec SQL CAS de déclaration
Je suis en train d'écrire une procédure stockée et selon une certaine valeur de la colonne, je veux être capable de changer ce tableau j'ai sélectionner à partir. Je vais essayer de donner un exemple:
SELECT ItemNumber,
ItemType,
Description
FROM
CASE ItemType
WHEN 'A' THEN TableA
ELSE TableB
END
WHERE
CASE ItemType
WHEN 'A' THEN ItemNumber = @itemNumber
ELSE PartNumber = @itemNumber
END
Comme vous pouvez le voir, je ne suis pas seulement l'évolution dynamique de la table, je sélectionner à partir, mais depuis ces deux tableaux ont été faites à deux fois par deux personnes différentes, les noms de colonne sont différents.
Donc, ma question est: Quelle est la meilleure façon pour ce faire, étant donné que SQL Server n'a pas l'air d'aimer ma requête, j'ai construit.
Si quelqu'un qui voit ce que je suis en train de faire peut suggérer une meilleure façon de le faire, je serais à toutes les oreilles 🙂
sqlserver est la balise pour Microsoft SQL Server. Il n'existe actuellement aucun autre produit de ce nom, et il est l'étiquette n'est utile que sur DONC pour celle-ci.
OriginalL'auteur Robert Iver | 2009-01-29
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser l'instruction de CAS dans la clause from, mais vous pouvez utiliser la commande suivante à la place:
OriginalL'auteur user34850
Vous pouvez essayer de la construction de l'instruction SQL dynamique comme une chaîne de caractères, puis d'appeler la procédure stockée sp_executesql pour exécuter la chaîne.
Voir ici pour plus d'informations et d'exemples.
Je suis d'accord, le PS a vraiment une mauvaise conception, mais je pense que c'est la solution la plus simple à la proposition de problème.
Je ne pense pas que le problème est spécifié assez solidement pour déterminer qu'il ne peut pas se résoudre avec SQL de base en premier. SQL dynamique ne doit pas être considérée en général, jusqu'à ce que l'obstacle à l'ordinaire SQL indiquer que c'est le bon choix.
OriginalL'auteur axel_c
Je ne suis pas sûr de savoir pourquoi vous voulez faire les choses dans une Instruction SQL .. je ne suis pas un Serveur SQL personne, mais dans une procédure stockée Oracle, vous pouvez écrire quelque chose comme ceci
Quelque chose comme cela devrait fonctionner dans SQL Server, trop .. peut-être que quelqu'un serait en mesure de développer cette?
OriginalL'auteur Thorsten
Vous n'êtes pas vraiment à expliquer où
ItemType
. Comme l'a suggéréUNION
peut être applicable si vous êtes tout simplement la combinaison de deux tables.Voici une autre possibilité qui peut se rapporter à votre problème:
OriginalL'auteur Cade Roux
Vous êtes mieux d'utiliser de l'UNION requête pour joindre les tables d'abord, puis sur SELECT.
Aussi, vous pouvez envisager de créer une vue pour l'une des tables, de sorte qu'il tire uniquement les colonnes dont vous avez besoin tout en les renommant, puis de l'UNION, puis sélectionnez à partir de l'UNION.
Ou l'utilisation d'une table temporaire pour stocker le résultat de chaque requête. Mettre la création de la table temporaire dans un CAS (pseudo-code, pas testé):
OriginalL'auteur Sunny Milenov