3 votes

Avoir une fonction à valeurs de table en T-SQL retournant une table avec un nombre variable de colonnes

Est-il possible d'avoir une fonction à valeur de table en T-SQL qui retourne une table avec un nombre variable de colonnes?
Les noms de colonnes peuvent simplement être 1, 2, …, n.

Actuellement, j'ai une fonction "fractionnement de chaîne" qui retourne une table 1 x n à une seule colonne, et je pivote la table ensuite vers une table n x 1, mais je préférerais rationaliser le processus en retournant le format de table correct dès le départ.

Je compte utiliser une procédure CLR en C# pour cette fonction, je ne sais simplement pas comment configurer la fonction définie par l'utilisateur pour retourner mes données dans le format souhaité : avec un nombre variable de colonnes, dépendant de la chaîne d'entrée.

0voto

srutzky Points 3766

Il n'est pas possible de retourner un jeu de résultats non statique à partir d'une fonction à valeurs de table (TVF), que ce soit écrit en T-SQL ou en .NET / SQLCLR. Seules les procédures stockées peuvent créer dynamiquement un jeu de résultats.

En gros, toute fonction doit retourner un type de résultat cohérent, que ce soit une valeur scalaire ou une collection (c'est-à-dire un jeu de résultats).

Cependant, dans une procédure stockée SQLCLR, vous pouvez créer un jeu de résultats dynamique via SqlMetaData. Tant que vous n'avez pas besoin explicite de SELECT ... FROM, une procédure stockée pourrait peut-être fonctionner.

Évidemment, vous pourriez également réussir à le faire en T-SQL, en utilisant du SQL dynamique pour construire une instruction SELECT basée sur la sortie de votre fonction de séparation.

Tout cela dépend exactement du contexte dans lequel cette fonctionnalité doit être utilisée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X