ストアドプロシージャを出力パラメーターで実行しますか?


197

テストしようとしているストアドプロシージャがあります。SQL Management Studioでテストしようとしています。このテストを実行するには、次のように入力します...

exec my_stored_procedure 'param1Value', 'param2Value'

最後のパラメータはoutput parameterです。ただし、出力パラメーターを使用してストアード・プロシージャーをテストする方法がわかりません。

出力パラメーターを使用してストアード・プロシージャーを実行するにはどうすればよいですか?

回答:


225

簡単な方法はにあるright-clickprocedureSQL Serverの管理Studio(SSMS)、

選択する execute stored procedure...

プロンプトに従って、入力パラメーターの値を追加します。

SSMS次に、新しいクエリウィンドウでプロシージャを実行するコードを生成し、実行します。生成されたコードを調べて、それがどのように行われるかを確認できます。


2
ストアドプロシージャを実行する他のすべての可能な方法(EXEC、C#またはPHPからの呼び出しなど)を知っていますが、これが最も簡単で、技術者でない人でもこれを実行できます。このため、+ 1とthxで情報を共有します。
ダヴァル2013

executeコマンドはありませんmodify。コンテキストメニューにはだけがあります。
Akbari 2015年

それは奇妙に思えます。ストアドプロシージャの私のコンテキストメニューには、変更、実行、プロパティなどを含む約12の項目があります
Ray

2
私自身はマウスのソリューションではなく、書かれたコマンドに興味があるので、以下のJaiderによる答えがこの答えを完成させると思います。
Alwyn Schoeman 2017

SSMSを使用するもう1つのわずかに異なる方法:SPを右クリックし、[スクリプトストアドプロシージャ]をクリックして、[実行]をクリックします。TSQLが表示されます。
John Gilmer

167

あなたはこれを行うことができます :

declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output

7
私は最後に「出力」と言っていませんでした。いつもバカなこと、ありがとう!
ミルン

SSMSでダイアログを開くことはできるだけ避けたいので、これは完璧でした。
ahwm 2015

89

プロシージャからvalを返す

ALTER PROCEDURE testme @input  VARCHAR(10),
                       @output VARCHAR(20) output
AS
  BEGIN
      IF @input >= '1'
        BEGIN
            SET @output = 'i am back';

            RETURN;
        END
  END

DECLARE @get VARCHAR(20);

EXEC testme
  '1',
  @get output

SELECT @get 

42

これをチェックしてください。最初の2つのパラメーターは入力パラメーターで、3番目のパラメーターはプロシージャー定義の出力パラメーターです。

DECLARE @PK_Code INT;
EXEC USP_Validate_Login  'ID', 'PWD', @PK_Code OUTPUT
SELECT @PK_Code

30

http://support.microsoft.com/kb/262499から

例:

CREATE PROCEDURE Myproc

@parm varchar(10),
**@parm1OUT varchar(30) OUTPUT**,
**@parm2OUT varchar(30) OUTPUT**
AS
  SELECT @parm1OUT='parm 1' + @parm
 SELECT @parm2OUT='parm 2' + @parm

GO

DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @parmIN VARCHAR(10)
DECLARE @parmRET1 VARCHAR(30)
DECLARE @parmRET2 VARCHAR(30)

SET @parmIN=' returned'
SET @SQLString=N'EXEC Myproc @parm,
                         @parm1OUT OUTPUT, @parm2OUT OUTPUT'
SET @ParmDefinition=N'@parm varchar(10),
                  @parm1OUT varchar(30) OUTPUT,
                  @parm2OUT varchar(30) OUTPUT'

EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@parm=@parmIN,
@parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2"
GO
DROP PROCEDURE Myproc

お役に立てれば!


26

手順例:

Create Procedure [dbo].[test]
@Name varchar(100),
@ID int Output   
As  
Begin   
SELECT @ID = UserID from tbl_UserMaster where  Name = @Name   
Return;
END     

このプロシージャを呼び出す方法

Declare @ID int    
EXECUTE [dbo].[test] 'Abhishek',@ID OUTPUT   
PRINT @ID

18

まず、出力変数を宣言します。

DECLARE @MyOutputParameter INT;

次に、ストアドプロシージャを実行します。次のように、パラメーターの名前なしで実行できます。

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

またはパラメータの名前:

EXEC my_stored_procedure @param1 = 'param1Value', @myoutput = @MyOutputParameter OUTPUT

そして最後に、次のようにして出力結果を確認できますSELECT

SELECT @MyOutputParameter 

4
これが選択された答えであるはずです
アナバル

9

これはどう?それは非常に単純化されています:

  1. 以下のSPROCの出力パラメーターは @ParentProductID

  2. 以下で宣言@ParentProductIDされ@MyParentProductIDているinto の出力の値を選択します。

  3. これがコードです:

    declare @MyParentProductID int
    
    exec p_CheckSplitProduct @ProductId = 4077, @ParentProductID =  @MyParentProductID output
    
    select @MyParentProductID

7

>これを複数の出力パラメーターに対してうまく機能するようにしてください:

CREATE PROCEDURE [endicia].[credentialLookup]
@accountNumber varchar(20),
@login varchar(20) output,
@password varchar(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 @login = [carrierLogin],@password = [carrierPassword]
  FROM [carrier_account] where carrierLogin = @accountNumber
  order by clientId, id
END

Try for the result: 
SELECT *FROM [carrier_account] 
DECLARE @login varchar(20),@password varchar(50)
exec [endicia].[credentialLookup] '588251',@login OUTPUT,@password OUTPUT
SELECT 'login'=@login,'password'=@password

3
CREATE PROCEDURE DBO.MY_STORED_PROCEDURE
(@PARAM1VALUE INT,
@PARAM2VALUE INT,
@OUTPARAM VARCHAR(20) OUT)
AS 
BEGIN
SELECT * FROM DBO.PARAMTABLENAME WHERE PARAM1VALUE=@PARAM1VALUE
END

DECLARE @OUTPARAM2 VARCHAR(20)
EXEC DBO.MY_STORED_PROCEDURE 1,@OUTPARAM2 OUT
PRINT @OUTPARAM2

3

このクエリを使用すると、任意のストアドプロシージャを実行できます(出力パラメーターの有無にかかわらず)。

DECLARE @temp varchar(100)  
EXEC my_sp
    @parameter1 = 1, 
    @parameter2 = 2, 
    @parameter3 = @temp output, 
    @parameter4 = 3, 
    @parameter5 = 4
PRINT @temp

ここで、@ tempのデータ型は、SP内の@ parameter3と同じである必要があります。

お役に立てれば..


これは役に立ちました。ありがとうございました。最初に変数を宣言することは考えていませんでした。構文例を見るためだけに必要です。これでおしまい。
Steven Johnson

1

これがストアドプロシージャです

create procedure sp1
(
@id as int,
@name as nvarchar(20) out
)
as
begin
select @name=name from employee where id=@id
end

そして、これはプロシージャを実行する方法です

 declare @name1 nvarchar(10)
    exec sp1 1,@name1 out
    print @name1

1

ストアドプロシージャを実行して出力変数値を取得するには、以下の例を確認してください。

    DECLARE @return_value int,
    @Ouput1 int,
    @Ouput2 int,
    @Ouput3 int

EXEC    @return_value = 'Your Sp Name'
        @Param1 = value1,
        @Ouput1 = @Ouput1 OUTPUT,
        @Ouput2 = @Ouput2 OUTPUT,
        @Ouput3 = @Ouput3 OUTPUT

SELECT  @Ouput1 as N'@Ouput1',
        @Ouput2 as N'@Ouput2',
        @Ouput3 as N'@Ouput3'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.