MS SQL: Suppress return value of stored procedure called in stored procedure

后端 未结 3 453
一个人的身影
一个人的身影 2021-01-11 13:34

I think I have the same problem as kcrumley describes in the question \"Problem calling stored procedure from another stored procedure via classic ASP\". However his questio

相关标签:
3条回答
  • 2021-01-11 13:53

    Those are not return variables, but output record sets. I guess that as soon as SQL server flushes output to client, you're screwed and can't take it back.

    I would solve this by adding a parameter to SP return_1, that would control if return_1 would select records or just do stuff and silently exit.

    0 讨论(0)
  • 2021-01-11 14:06

    As Matt points out in his comment, neither solution really 'swallow' the first resultset. I don't know why you'd want this but you can 'swallow' the result of the first exec by using a table variable. It must match the exact amount and type of the result set's columns. Like so:

    CREATE PROCEDURE return_1 AS 
        SET NOCOUNT ON;
        SELECT 1
    GO
    CREATE PROCEDURE call_return_1_and_return_2 AS 
        SET NOCOUNT ON;
        DECLARE @Result TABLE (res int)
        insert into @Result EXEC return_1
        SELECT 2
    GO
    
    0 讨论(0)
  • 2021-01-11 14:17

    Its not the NOCOUNT thats causing this, your stored procedures have a select each so each one is coming in its own result set. This could be avoided by changing your first stored procedure to use output parameters to pass the number 1 back rather than doing a select. The second stored procedure could then examine the output parameter to get the data it needs to run.

    Try something like this

    CREATE PROCEDURE Proc1
    (
        @RetVal INT OUTPUT
    )
    AS
    SET NOCOUNT ON
    SET @RetVal = 1
    


    CREATE PROCEDURE Proc2
    AS
    SET NOCOUNT ON
    DECLARE @RetVal int
    EXEC    [dbo].[Proc1]
            @RetVal = @RetVal OUTPUT
    SELECT  @RetVal as N'@RetVal'
    
    0 讨论(0)
提交回复
热议问题