J'ai une situation où je veux avoir un proc stocké retournant une table qui s'appelle récursivement dans le cadre de son calcul.récursivité stockée proc dans SQL Server
Malheureusement, SQL Server n'a rien de tout cela et me donne une erreur à la fois de ne pas pouvoir déclarer un curseur qui existe déjà et de ne pas pouvoir imbriquer et insérer une instruction exec. Pourrais-je contourner certains de ces problèmes en utilisant une fonction?
Y a-t-il une autre meilleure façon de faire cela?
Le calcul est intrinsèquement récursif, donc il n'y a pas moyen de contourner ce problème en utilisant des jointures autant que je sache.
EDIT: pour clarifier le calcul réel puisque le code est compliqué par d'autres choses et pourrait compliquer la table On suppose que Cervin
A a des colonnes (containerId, objID, objType, poids) et le tableau B comporte des colonnes (itemID , valeur).objType dans le tableau A vous indique si objID dans le tableau A est un containerId (encore une fois dans le tableau A) ou est et itemID du tableau B.
(containerId, objID) est une clé primaire sur le tableau A est itemID sur la table B.
En général, un conteneur contient des dizaines à des centaines d'articles ou d'autres conteneurs. Espérons que la profondeur de la récurrence ne dépasse pas une douzaine de niveaux. (deviner) Le calcul consiste à obtenir une moyenne pondérée.
Je voudrais en savoir plus sur le calcul ... les fonctions joueront sans aucun doute un rôle, mais vous seriez surpris de certaines des choses insensées que vous pouvez faire avec les sous-requêtes et les vues. J'aime les curseurs, mais ils sont souvent calomniés ... – Fosco
Pourriez-vous fournir un peu plus d'informations - en particulier en ce qui concerne la nature du sproc récursif. –
Est-ce SQL Server? Si vous utilisez SQL 2008, vous pouvez utiliser un CTE récursif pour accomplir la plupart des tâches sans avoir besoin d'un curseur du tout. Que diriez-vous d'un échantillon de code pour que nous puissions voir ce que vous essayez de faire? – JohnFx