2016-12-13 77 views
0

我有兩個SQL腳本:腳本A和B.腳本A檢索信息並使用sp_executesql命令調用存儲過程(腳本B)。我可以成功地完成這一點。SQL Pass參數從一個存儲過程到另一個

但是,現在我想將腳本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 

回答

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 

這裏是您要acheive什麼工作模板。

--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 
+0

我改變了這一切,它似乎試圖傳遞,不幸的是,現在腳本A越來越錯誤陳述WMCM SP期待但未提供該參數@nID 。有任何想法嗎? – arios

+0

過程A中的sp_execute需要修改以傳入值。 – pacreely

+0

確實....如何去修改它,以便它正確地傳遞它?我正在嘗試每一種方式,但仍然得到相同的錯誤。 – arios

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 
+1

您可以只使用@InAndOutValue,但我喜歡分開關注點。並有我的輸入變量,然後我的輸出變量。但是這給了你這個想法。 – granadaCoder

相關問題