2017-07-16 1 views
0

J'ai une procédure dbo.pX qui renvoie une table avec 1 champ nommé id et un INT, qui peut être égal à 0, ou un autre entier positif. Je dois insérer cette id dans une variable dans une procédure appelée dbo.pY, afin de vérifier si le id est supérieur à 0.Comment insérer un champ d'un résultat de procédure dans une variable?

Procédure dbo.pX:

CREATE PROCEDURE dbo.pX 
    @param1 VARCHAR(30) 
AS 
    DECLARE @id INT; 
    -- Some code to change the @id 
    SELECT @id AS 'id'; 
GO 

Ce que j'ai essayé de faire en dbo.pY:

CREATE PROCEDURE dbo.pY 
    @param1 VARCHAR(30) 
AS 
    DECLARE @ret INT; 
    SET @ret = (EXECUTE dbo.pX 'something'); 
    IF (@ret > 0) BEGIN 
     -- Some code that uses @ret 
    END 
GO 

Des conseils ou astuces pour m'aider à trouver un moyen de le résoudre? Observer: Je ne peux pas modifier la procédure dbo.pX.

+0

soit vous utilisez un scalaire fonction à retourner ou un script stocké avec l'option de sortie – maSTAShuFu

+1

Procédure stockée Paramètres de sortie: https://technet.microsoft.com/en-us/library/ms187004(v=sql.105).aspx. INSERT INTO EXEC: https://stackoverflow.com/questions/12686175/sql-server-insert-into-execute-statement – Alex

+0

INSERT INTO m'a aidé à atteindre la solution, merci :) –

Répondre

0

Comme je connais les champs que la procédure me apportait, et je ne pouvais pas changer cette procédure, je résous comme ceci:

CREATE PROCEDURE dbo.pY 
    @param1 VARCHAR(30) 
AS 
    -- insert the procedure table inside a temporary table 
    DECLARE @temp TABLE (id INT); 
    INSERT INTO @temp EXECUTE dbo.pX 'something'; 

    -- insert id that the table brings in a variable 
    DECLARE @ret INT; 
    SELECT @ret = id FROM @temp; 

    IF (@ret > 0) BEGIN 
     -- Some code that uses @ret 
    END 
GO 

Problème résolu :)