Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête pivot dynamique sans stocker la requête sous forme de chaîne

Réponse courte : non.

Réponse longue :

Eh bien, c'est toujours non . Mais je vais essayer d'expliquer pourquoi. À partir d'aujourd'hui, lorsque vous exécutez la requête, le moteur de base de données exige de connaître la structure de l'ensemble de résultats (nombre de colonnes, noms de colonnes, types de données, etc.) que la requête renverra. Par conséquent, vous devez définir la structure du jeu de résultats lorsque vous demandez des données à la base de données. Pensez-y :avez-vous déjà exécuté une requête dont vous ne connaissiez pas la structure de l'ensemble de résultats ?

Cela s'applique également même lorsque vous faites select * , qui est juste une syntaxe de sucre. À la fin, la structure renvoyée est "toutes les colonnes de cette ou ces tables".

En assemblant une chaîne, vous générez dynamiquement la structure que vous désirez, avant de demander le jeu de résultats. C'est pourquoi ça marche.

Enfin, vous devez savoir que l'assemblage dynamique de la chaîne peut théoriquement et potentiellement (bien que peu probable) vous obtenez un jeu de résultats avec des colonnes infinies. Bien sûr, ce n'est pas possible et cela échouera, mais je suis sûr que vous avez compris les implications.

Mettre à jour

J'ai trouvé ceci, ce qui renforce les raisons pour lesquelles cela ne fonctionne pas.

ici :

Je continuerai à chercher et à ajouter ici.