java output 参数_使用 OUTPUT 参数返回数据

使用 OUTPUT 参数返回数据

如果在过程定义中为参数指定 OUTPUT 关键字,则存储过程在退出时可将该参数的当前值返回至调用程序(是否是有点儿像“按地址传递”)。若要用变量保存参数值以便在调用程序中使用,则调用程序必须在执行存储过程时使用 OUTPUT 关键字。

示例

下列示例显示有一个输入参数和一个输出参数的存储过程。存储过程中的第一个参数 @title 将接收由调用程序指定的输入值,而第二个参数 @ytd_sales 将向调用程序返回该值。SELECT 语句使用 @title 参数以获得正确的 ytd_sales 值,并将该值赋予 @ytd_sales 输出参数。

CREATE PROCEDURE get_sales_for_title

@title varchar(80), -- This is the input parameter.

@ytd_sales int OUTPUT -- This is the output parameter.

AS

-- Get the sales for the specified title and

-- assign it to the output parameter.

SELECT @ytd_sales = ytd_sales

FROM titles

WHERE title = @title

RETURN

GO

下列程序用输入参数值执行存储过程,并将存储过程的输出值保存到调用程序的局部变量 @ytd_sales_for_title 中。

-- Declare the variable to receive the output value of the procedure.

DECLARE @ytd_sales_for_title int

-- Execute the procedure with a title_id value

-- and save the output value in a variable.

EXECUTE get_sales_for_title

"Sushi, Anyone?", @ytd_sales = @ytd_sales_for_title OUTPUT

-- Display the value returned by the procedure.

PRINT 'Sales for "Sushi, Anyone?": ' + convert(varchar(6),@ytd_sales_for_title)

GO

Sales for "Sushi, Anyone?": 4095

执行存储过程时,也可为 OUTPUT 参数指定输入值。这样将允许存储过程从调用程序中接收一个值,更改该值或对该值执行操作,然后将新值返回至调用程序。在前面的示例中,可在执行存储过程前将一个值赋予 @ytd_sales_for_title 变量。@ytd_sales 变量在存储过程主体中包含参数值,而该存储过程在退出时,将 @ytd_sales 变量值返回至调用程序。这常常被称作"传址调用功能"。

如果在执行存储过程时对参数指定 OUTPUT,而在存储过程中该参数又不是用 OUTPUT 定义的,那么将收到一条错误信息。在执行带有 OUTPUT 参数的存储过程时,可以不指定 OUTPUT。这样不会返回错误,但将无法在调用程序中使用该输出值。

(Q:)还有return与output有何区别?

(A:)return 只能一个;output 可以有多个

(Q:)有二个过程!

/*

过程1

检测用户名是否重复*/

create proc check_user

@name varchar(15),

@state int output

as

begin

if exists(select name form tblname where name=@name)

set @state = 1

end

/*

过程2

想调用check_user的@state值,如果不为1就写入数据表,但不知如何取得该值。

*/

create proc insert_new

@name varchar(15),

@pw varchar(15),

@email varchar(20)

as

begin

'当@state=0时

insert into-------

end

(A:)create proc check_user @name varchar(15),@state int output

as

if exists(select name form tblname where name=@name)

set @state = 1

else

set @state = 0

GO

create proc insert_new @name varchar(15),@pw varchar(15),@email varchar(20)

as

declare @state int

exec check_user @name,@state output

if @state=0

insert into ...

GO

(A:)create proc check_user @name varchar(15),@state int output

as

if exists(select name form tblname where name=@name)

set @state = 1

else

set @state = 0

GO

create proc insert_new @name varchar(15),@pw varchar(15),@email varchar(20)

as

declare @state int

exec check_user @name,@state output

if @state=0

insert into ...

GO

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2005-03-07 20:44

浏览 500

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值