使用输出参数执行存储过程?


197

我有一个要测试的存储过程。我正在尝试通过SQL Management Studio进行测试。为了运行此测试,我输入...

exec my_stored_procedure 'param1Value', 'param2Value'

最终参数是output parameter。但是,我不知道如何使用输出参数测试存储过程。

如何运行带有输出参数的存储过程?

Answers:


225

最简单的方法是right-clickprocedureSQL Server管理Studio(SSMS)

选择 execute stored procedure...

并根据提示为输入参数添加值。

SSMS然后将生成代码以在新的查询窗口中运行proc,并为您执行该代码。您可以研究生成的代码以了解其完成方式。


2
我知道执行存储过程的所有其他可能方式(例如EXEC,从C#或PHP调用),但这是最简单的方法,非技术人员可以做到这一点。因此,为此+1,并分享信息。
Dhaval 2013年

我没有execute命令,上下文菜单只有一个modify
Akbari 2015年

好像很奇怪 我在存储过程中的上下文菜单上有大约十二个项目,包括修改,执行,属性和其他项目
Ray

2
我认为下面Jaider的回答可以完成此回答,因为我本人会对书面命令而不是鼠标解决方案感兴趣。
Alwyn Schoeman

使用SSMS的另一种略有不同的方式:右键单击SP,单击“脚本存储过程为”,然后单击“执行到”。这将向您显示TSQL。
约翰·吉尔默

167

你可以这样做 :

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

7
最后我没有说“输出”。总是有些愚蠢,谢谢!
Milne 2015年

我希望尽可能避免在SSMS中打开对话框,因此非常完美。
ahwm

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

进行检查,在过程定义中,前两个参数是输入参数,第三个参数是输出参数。

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
这应该是选择的答案
anaval

9

这个怎么样?极其简化:

  1. 下面的SPROC的输出参数为 @ParentProductID

  2. 我们要选择的输出值@ParentProductID@MyParentProductID其声明如下。

  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相同。

希望这可以帮助..


这对我很有帮助。谢谢。我不认为先声明变量。只需要看一个语法示例。就是这样
史蒂文·约翰逊

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'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.