使用输出参数执行存储过程?
Posted
技术标签:
【中文标题】使用输出参数执行存储过程?【英文标题】:Execute stored procedure with an Output parameter? 【发布时间】:2010-12-08 01:11:24 【问题描述】:我有一个正在尝试测试的存储过程。我正在尝试通过 SQL Management Studio 对其进行测试。为了运行这个测试,我输入 ...
exec my_stored_procedure 'param1Value', 'param2Value'
最后一个参数是output parameter
。但是,我不知道如何测试带有输出参数的存储过程。
如何运行带有输出参数的存储过程?
【问题讨论】:
【参考方案1】:来自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
希望这会有所帮助!
【讨论】:
【参考方案2】:简单的方法是在 Sql Server Management Studio(SSMS) 中的procedure
上right-click
,
选择execute stored procedure...
并根据提示为 输入 参数添加值。
SSMS
然后将生成代码以在新的查询窗口中运行 proc,并为您执行它。您可以研究生成的代码,看看它是如何完成的。
【讨论】:
我知道执行存储过程的所有其他可能方式(如 EXEC ,从 C# 或 php 调用),但这是最简单的,非技术人员可以做到这一点。所以 +1 和 thx 分享信息。 我没有execute
命令,上下文菜单只有一个modify
。
这看起来很奇怪。我的存储过程上下文菜单有十几个项目,包括修改、执行、属性等
我认为下面 Jaider 的回答完成了这个答案,因为我自己会对书面命令而不是鼠标解决方案感兴趣。
使用 SSMS 的另一种稍微不同的方式:右键单击 SP,单击“将存储过程编写为”,然后单击“执行到”。这将显示 TSQL。【参考方案3】:
你可以这样做:
declare @rowCount int
exec yourStoredProcedureName @outputparameterspOf = @rowCount output
【讨论】:
【参考方案4】:从过程中返回 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
【讨论】:
【参考方案5】:勾选此项,其中前两个参数是输入参数,第三个是过程定义中的输出参数。
DECLARE @PK_Code INT;
EXEC USP_Validate_Login 'ID', 'PWD', @PK_Code OUTPUT
SELECT @PK_Code
【讨论】:
【参考方案6】:这个怎么样?它非常简化:
下面的SPROC有一个输出参数@ParentProductID
我们想将@ParentProductID
的输出值选择为@MyParentProductID
,它在下面声明。
这是代码:
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
【讨论】:
【参考方案8】:程序示例:
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
【讨论】:
【参考方案9】: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
【讨论】:
【参考方案10】:首先,声明输出变量:
DECLARE @MyOutputParameter INT;
然后,执行存储过程,你可以不带参数名,像这样:
EXEC my_stored_procedure 'param1Value', @MyOutputParameter OUTPUT
或使用参数名称:
EXEC my_stored_procedure @param1 = 'param1Value', @myoutput = @MyOutputParameter OUTPUT
最后,您可以通过SELECT
看到输出结果:
SELECT @MyOutputParameter
【讨论】:
这应该是选择的答案【参考方案11】:这是存储过程
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
【讨论】:
【参考方案12】:请查看以下示例,通过执行存储过程获取输出变量值。
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'
【讨论】:
【参考方案13】:我在 SQL Proc 中使用了输出参数,后来我在结果集中使用了这个值。
【讨论】:
你不应该把你的代码直接作为图像。【参考方案14】:使用此查询,您可以执行任何存储过程(带或不带输出参数):
DECLARE @temp varchar(100)
EXEC my_sp
@parameter1 = 1,
@parameter2 = 2,
@parameter3 = @temp output,
@parameter4 = 3,
@parameter5 = 4
PRINT @temp
这里@temp的数据类型应该与SP中的@parameter3相同。
希望这会有所帮助..
【讨论】:
这对我很有帮助。谢谢你。我没想过要先声明变量。只需要看一个语法示例。就是这样。【参考方案15】:这里是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())
【讨论】:
以上是关于使用输出参数执行存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,