2016-12-13 5 views
0

2つのSQLスクリプト:スクリプトAおよびBがあります。スクリプトAは情報を取得し、sp_executesqlコマンドを使用してストアドプロシージャ(スクリプトB)を呼び出します。私はこれを成功裏に達成することができます。1つのストアドプロシージャから別のストアドプロシージャへのSQLパスパラメータ

しかし、今私はスクリプト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

、供給されなかったパラメータ@nIDを期待して、残念ながら、今のスクリプトAがWMCM SPを示すエラーを取得している、渡そうとしているようです。何か案は? – 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

関連する問題