2011-04-25 5 views
0

Ma question estAppel d'une procédure stockée dans une procédure stockée

Appeler un proc stocké dans un proc stocké dans une autre procédure stockée. Quand ce type de développement est-il préjudiciable? Afin de promouvoir la réutilisation de code, nous avons encapsulé diverses instructions d'insertion/mise à jour dans des procédures stockées. Donc, si vous voulez insérer un enregistrement de Foo, alors vous passerez les paramètres à la procédure stockée de CreateFoo et passerez votre journée.

Eh bien laisse supposer un objet Foo a besoin de créer un barre des objets qui crée également un objet Mark.

Ainsi votre procédure stockée appellera le foo proc stocké qui sera ensuite appeler la barre stockée proc qui appellera alors la marque stockée proc.

Quand est-ce pas une bonne idée, et quelles sont mes autres options. Merci beaucoup. Si vous le pouviez, pourriez-vous mettre les sources qui sauvegardent votre réponse. Encore, merci beaucoup.

+0

Insérez-vous seulement une rangée à la fois? –

+0

Oui. Quand appel ** FOO ** je fais, mais si je n'ai pas et les procédures stockées ont dû faire une pléthore de choses quand cela aurait effectivement un effet négatif. Êtes-vous en train de dire si je suis juste en train d'insérer 1 ligne, je devrais simplement dupliquer cette instruction d'insertion partout où je l'utilise au lieu d'appeler un proc stocké? – gh9

+0

Alors, comment inséreriez-vous des lignes '10000'' foo'? Vous appelez la procédure dans une boucle 10 000 fois? –

Répondre

3

Ce n'est pas bon ou mauvais - si vous devez appeler l'une procédure de l'autre, il suffit de le faire.

La mise en œuvre logique au niveau de la base de données dans les procédures stockées n'est pas une bonne façon de faire les choses dans la plupart des cas:

  • rend votre application dépend de ce SGBD particulier
  • il est plus complexe à l'échelle l'application sur la couche de base de données puis à l'échelle sur la couche intermédiaire.
  • cela complique le débogage (à moins que vous pouvez placer un point d'arrêt dans votre SP)
  • langage SP (SQL) est généralement pas flexible et puissant langage de couche intermédiaire

Mais pour certaines applications (et il peut être votre cas) il est préférable d'utiliser SP - lorsque les inconvénients sont battus par les pros: mise en œuvre simple et rapide de la logique sur la langue que vous connaissez mieux.

+0

Je crois que j'ai mal communiqué quelque chose. C'est essentiellement ce que j'aimerais accomplir. Nous avons un dossier témoin, ce dossier témoin contient un ID de personne qui est la clé primaire d'une table de personne. Ce tableau contient toutes les informations relatives à cette personne. Nous voulons d'abord insérer l'enregistrement de la personne, puis prendre l'identité de la portée et la placer dans le dossier du témoin. Nous voulons être en mesure d'avoir un sp générique qui insère les gens afin que nous n'ayons pas à dupliquer à nouveau l'insertion de personne dans le recod – gh9

+0

@ gh9 - Cela a du sens.Il ne se prête pas à un traitement basé sur des ensembles, donc je pourrais être tenté d'utiliser la clause 'OUTPUT' au lieu de' SCOPE_IDENTITY' et 'Table Valued Parameters' plutôt que des paramètres scalaires pour permettre la possibilité de traiter des insertions multirow dans un manière plus basée basée. –

+0

Sql Server 2005, pas de paramètres de table. Pourquoi la clause de sortie serait-elle meilleure qu'une déclaration de retour? – gh9

Questions connexes