0

我有一个存储过程,我在其中获取所有输入参数值,然后在该存储过程中运行另一个需要设置变量值的存储过程。

我不确定如何使用父存储过程设置子存储过程的变量。此外,父存储过程的输出不是子存储过程的输入。

CREATE PROCEDURE [dbo].[usp_aStoredProcedure_1]
    @sp1_var char(12),
    @sp1_var char(12),
    @sp1_var char(12),
    ...     
    @sp2_var char(20)

AS
CREATE TABLE #aTemp_tbl
(
    col1 char(20)
)

CREATE TABLE #Results_tbl
(
    col1 char(20),
    val1 char(12)
)
IF @val1 IS NOT NULL
    BEGIN
        DELETE FROM #aTemp_tbl
        INSERT INTO #aTemp_tbl EXEC usp_aStoredProcedure_2 @val1 /* this stored procedure requires @sp2_var value, how can I assign it within this usp_aStoredProcedure_1 stored procedure?*/
        IF NOT EXISTS (SELECT * FROM #aTemp_tbl)            
            INSERT INTO #Results_tbl SELECT NULL, @val1
        ELSE
            INSERT INTO #Results_tbl SELECT col1 , @val1 FROM #aTemp_tbl
    END
4

2 回答 2

0

您不能直接从父存储过程设置子存储过程的变量。您必须为此使用子过程的参数

请参见下面的示例:

-- child procedure
create procedure p1
    @param1 varchar(4),
    @param2 varchar(4)
as
begin
    select @param1 + @param2;
end;

-- parent procedure
create procedure p2
    @param1 varchar(2),
    @param2 varchar(2)
as
begin

    declare
        @param3 varchar(4),
        @param4 varchar(4);

    select
        @param3 = @param1 + '_x',
        @param4 = @param2 + '_x'

    -- setting parameters of child stored procedure using parent stored procedure
    exec p1 @param3, @param4;
end;

-- call parent procedure
exec p2 '1', '2'
于 2013-07-28T09:37:49.050 回答
0

将值传递给子存储过程,就像您为父存储过程所做的那样......

于 2013-07-28T08:55:51.773 回答