Comment combiner l'exécution d'une procédure stockée et l'utilisation de son résultat ou de ses parameters dans une requête SQL régulière?
Par exemple, je voudrais faire quelque chose comme:
-- passing result of SELECT to SP SELECT a, b FROM t EXEC my_sp a, b -- passing result of SP to INSERT INSERT INTO t EXEC my_sp a, b
etc.
non, vous devez utiliser une table temporaire
create table #results (col1 int, col2 varchar(5) ...) INSERT INTO #results EXEC YourProcedure @parma...
alors vous pouvez vous y joindre
SELECT * FROM YourTable y JOIN #results r ON ... ....
Si vous ne connaissez pas les colonnes et les types de données de la procédure, vous pouvez utiliser cette excellente réponse: Insérer les résultats d'une procédure stockée dans une table temporaire
En bref, il utilise OPENROWSET
pour exécuter la procédure stockée dans une table #temp créée à la volée, sans avoir besoin de nommer et de connaître le type de toutes les colonnes.
Si votre SP peut être réécrit comme une UDF de table en ligne, celles-ci fonctionnent généralement très bien et sont équivalentes à une vue paramétrée. ITVF peut être utilisé n'importe où vous utiliseriez une table ou une vue.
Si votre SP ne fonctionne pas en tant que TVF en ligne (manipulation de variable locale requirejse), il peut fonctionner comme un TVF multi-états (contient un BEGIN / END) qui peut ou peut ne pas fonctionner correctement selon ce que vous devez faire.
Après que votre SP a été transformé en UDF, vous pouvez toujours appeler l'UDF à partir de votre SP (SELECT * FROM udf (params)) ou ailleurs, il peut être utilisé pour les jointures, etc, donc tout votre code se trouve dans l'UDF – non reproduction.