SQL 取存储过程的返回值
declare@p1varchar(12)exec@p1=getcrdhselect@p1提示错误消息245,级别16,状态1,过程getcrdh,第26行在将varch...
declare @p1 varchar(12)
exec @p1=getcrdh
select @p1
提示错误
消息 245,级别 16,状态 1,过程 getcrdh,第 26 行
在将 varchar 值 'CR2013100001' 转换成数据类型 int 时失败。
存储过程getcrdh为
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getcrdh]
AS
declare @dh varchar(12)
declare @zh int
declare @xh varchar(4)
BEGIN
SET NOCOUNT ON;
if exists(select cbillcode from cgrkz where month(cbilldate)=month(getdate()))
begin
set @zh = (select cast(right(max(cbillcode),4) as int) from cgrkz where month(cbilldate)=month(getdate()))+1
end
else
begin
set @zh=1
end
set @zh=10000+@zh
set @xh=right(cast(@zh as varchar(5)),4)
SET @dh='CR'+cast(year(getdate()) as varchar(4))+cast(month(getdate()) as varchar(4))+@xh
return @dh
END
将其中的SQL语句单独执行返回CR2013100001
不知道上面的exec会提示转化int 展开
exec @p1=getcrdh
select @p1
提示错误
消息 245,级别 16,状态 1,过程 getcrdh,第 26 行
在将 varchar 值 'CR2013100001' 转换成数据类型 int 时失败。
存储过程getcrdh为
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getcrdh]
AS
declare @dh varchar(12)
declare @zh int
declare @xh varchar(4)
BEGIN
SET NOCOUNT ON;
if exists(select cbillcode from cgrkz where month(cbilldate)=month(getdate()))
begin
set @zh = (select cast(right(max(cbillcode),4) as int) from cgrkz where month(cbilldate)=month(getdate()))+1
end
else
begin
set @zh=1
end
set @zh=10000+@zh
set @xh=right(cast(@zh as varchar(5)),4)
SET @dh='CR'+cast(year(getdate()) as varchar(4))+cast(month(getdate()) as varchar(4))+@xh
return @dh
END
将其中的SQL语句单独执行返回CR2013100001
不知道上面的exec会提示转化int 展开
2个回答
展开全部
你这个存储过程,这样直接返回字符串,是不行的。存储过程直接返回,只能返回int类型的数据,或者是int类型的字符串。
你需要为你的存储过程定义一个输出参数。然后在调用时,接收这个输出参数。
你需要为你的存储过程定义一个输出参数。然后在调用时,接收这个输出参数。
追问
怎么修改麻烦您给我说下嘛,真的是初学者啊
追答
--修改
ALTER PROCEDURE [dbo].[getcrdh]
@dh nvarchar(12) output
AS
declare @zh int
declare @xh varchar(4)
BEGIN
SET NOCOUNT ON;
if exists(select cbillcode from cgrkz where month(cbilldate)=month(getdate()))
begin
set @zh = (select cast(right(max(cbillcode),4) as int) from cgrkz where month(cbilldate)=month(getdate()))+1
end
else
begin
set @zh=1
end
set @zh=10000+@zh
set @xh=right(cast(@zh as varchar(5)),4)
SET @dh='CR'+cast(year(getdate()) as varchar(4))+cast(month(getdate()) as varchar(4))+@xh
END
GO
--调用
declare @p1 varchar(12)
exec getcrdh @p1 output
select @p1
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询