关于储存过程的返回值

来源:百度知道 编辑:UC知道 时间:2024/05/14 02:52:46
/*随机产生随机卡号存储过程*/
if exists(select * from sysobjects where name = 'proc_CardID')
drop proc proc_CardID
go
create proc proc_CardID
@outCart char(19) output
as
declare @r numeric(15,8)
declare @tempStr char(10)
declare @randCardID char(19)
select @r =rand((datepart(mm,getdate()) * 100000 )
+ (datepart(ss,getdate()) * 1000 ) + datepart(ms,getdate()))
set @tempStr=convert(char(10),@r)
set @randCardID = '1010 3576 ' + substring(@tempStr,3,4) + ' ' + substring(@tempStr,7,4)
go
上面的代码是随机产生一个类似银行卡号的随机字符值。
可是我用
declare @mycardID char(19)
exec proc_CardID @mycardID output
print @mycardID
调用些储存过程却无法显示出其的值,请问我是哪里出错了。
如果在储存过程后面加个select 是可以返回一个值的,我就是想把返回
的这个值赋值给一个变量,然后这个变量会使用到insert语句中去的。
不知道为什么就算我加了select 在储存过程最后面,可以调用它并用
print可以打印出来,但把这个值用到insert语句中却报错,说值为null.
请高手帮忙

你没将生成的卡号传值给参数

在最后加上一句
set @outcart =@randcardid
就可以了

if exists(select * from sysobjects where name = 'proc_CardID')
drop proc proc_CardID
go
create proc proc_CardID
@outCart char(19) output
as
declare @r numeric(15,8)
declare @tempStr char(10)
declare @randCardID char(19)
select @r =rand((datepart(mm,getdate()) * 100000 )
+ (datepart(ss,getdate()) * 1000 ) + datepart(ms,getdate()))
set @tempStr=convert(char(10),@r)
set @randCardID = '1010 3576 ' + substring(@tempStr,3,4) + ' ' + substring(@tempStr,7,4)
print @randCardID
go

我改了一下,打印了@randCardID卡号,是有值的,
如果在这个存储过程中再增加一个insert语句也是没有问题的。

同意楼上看法,可以直接在这个存储过程中加一个insert语句,直接将
@randCarkID插入可以成功!

if exists(select * from sysobjects where name = 'proc_CardID')
drop proc proc_CardID
go
create proc proc_CardID
@outCart char(19) output
as
declare