执行带有Output参数的存储过程?

我有一个要测试的存储过程。我试图通过SQL管理工作室测试它。为了运行这个测试,我输入…

exec my_stored_procedure 'param1Value', 'param2Value'

最后一个参数是output parameter。但是,我不知道如何测试带有输出参数的存储过程。

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

855666 次浏览

来自https://learn.microsoft.com/en-US/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql(原来是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

最简单的方法是在Sql Server Management Studio (SSMS)中右键单击该过程,选择“执行存储过程…”并根据界面提示为输入参数添加值。然后,SSMS将生成代码以在新的查询窗口中运行过程,并为您执行它。您可以研究生成的代码,了解它是如何完成的。

你可以这样做:

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

从过程返回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

检查一下,其中前两个参数是输入参数,第三个是Procedure定义中的输出参数。

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

这个怎么样?它非常简单:

  1. 下面的SPROC有一个@ParentProductID的输出参数

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

  3. 代码:

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

试试这个;对于多个输出参数,它工作得很好:

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

操作步骤示例:

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

首先,声明输出变量:

DECLARE @MyOutputParameter INT;

然后,执行存储过程,你可以不带参数名,就像这样:

EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT

或者使用参数名:

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

最后,你可以通过执行SELECT来查看输出结果:

SELECT @MyOutputParameter

下面是存储过程

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

请查看下面的示例,通过执行存储过程获得输出变量值。

    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'

使用这个查询,你可以执行任何存储过程(带或不带输出参数):

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

在这里,@temp的数据类型应该与存储过程中的@parameter3相同。

下面是stored_proc的定义:

create proc product(@a int,@b int)
as
return @a * @b
并且,这是从Python中执行它: Conn = pyodbc.connect('…') Cursor = conn.cursor()

sql = """
SET NOCOUNT ON
declare @r float
exec @r=dbo.product 5,4
select @r
"""
result = cursor.execute(sql)
print (result.fetchall())