SQL Pass参数从一个存储过程到另一个存储过程

时间:2016-12-13 20:05:52

标签: sql sql-server sql-server-2008

我有两个SQL脚本:脚本A和B.脚本A检索信息并使用sp_executesql命令调用存储过程(脚本B)。我能成功地做到这一点。

但是,现在我想将脚本A中的值传递给脚本B.我无法完成此操作。 @nID是我想传递的参数。我使用此链接作为参考https://msdn.microsoft.com/en-IN/library/ms188001.aspx

我的脚本已附加。为简单起见,我只是将参数值设为5.那么如何将一个'5'从一个脚本传递到另一个脚本呢?谢谢你的帮助。

脚本A

     BEGIN



 SET NOCOUNT ON;
     DECLARE @sp nVARCHAR(25) 
     DECLARE @nID nvarchar(25)  
     DECLARE @busID nvarchar(25)
     DECLARE @ParmDefinition nvarchar(500)
     SET @ParmDefinition = N'@nID nvarchar(50) output ';  

    set @sp = 'WMCOMM';
    set @busID = 5
    execute sp_executesql @sp, @ParmDefinition, @nID = @busID;
        END

脚本B

ALTER PROCEDURE [dbo].[WMCM]


AS
BEGIN 

    SET nocount ON; 
    declare @numID  nvarchar(50) 
    insert into tester(numid)
    values(@numID)
END

2 个答案:

答案 0 :(得分:1)

存储过程B需要输入参数

ALTER PROCEDURE [dbo].[WMCM]
@nID nvarchar(25) --DECLARE PARAMETER HERE THEN YOU CAN USE IT IN THE SP
AS
BEGIN 

    SET nocount ON; 
    declare @numID  nvarchar(50) 
    insert into tester(numid)
    values(@numID)
END

这是您正在尝试实现的工作模板。

--RUN ME FIRST
CREATE procedure dbo.B
@nID AS NVARCHAR(5)
AS
SELECT @nID

GO

--RUN ME SECOND

CREATE procedure dbo.A
AS

DECLARE @nID NVARCHAR(50) = 'abc'
DECLARE @sp NVARCHAR(50) = 'EXECUTE dbo.B @nID'

EXECUTE sp_executesql @sp,N'@nID NVARCHAR(50)',@nID = @nID;

GO

--RUN ME THIRD
EXEC dbo.a

答案 1 :(得分:1)

我把存储过程愚蠢到只显示并返回。

但这可以做你想要的:

alter PROCEDURE [dbo].[WMCM]
@nID nvarchar(25) --DECLARE PARAMETER HERE THEN YOU CAN USE IT IN THE SP
, @InAndOutValue nvarchar(50) OUTPUT

AS
BEGIN 

    SET nocount ON; 


    Select '[dbo].[WMCM] has access to :' as ProcName , @nID as TheId

    Select '[dbo].[WMCM] can use same variable as input and output.  InValue :' as ProcName , @InAndOutValue as TheId

    select @InAndOutValue= 'NowImAnOutValue'

END



GO





DECLARE @SQL_String NVARCHAR(max)
DECLARE @Parameter_Definition NVARCHAR(max)

SET @SQL_String = N'
  EXEC [dbo].[WMCM] @nID = @nID_input, @InAndOutValue = @InAndOutValue_out OUTPUT
'

SET @Parameter_Definition = N'
  @nID_input nvarchar(25), 
  @InAndOutValue_out nvarchar(50) OUTPUT'

DECLARE @nID nvarchar(25)
DECLARE @InAndOutValue nvarchar(50)

SET @nID = '5'

SET @InAndOutValue = 'InAndOutVariable_JustInValue'

EXECUTE sp_executesql @SQL_String, @Parameter_Definition, @nID_input = @nID, @InAndOutValue_out = @InAndOutValue OUTPUT

SELECT @InAndOutValue as IGotTheInAndOutValue