SQL 取存储过程的返回值

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

你这个存储过程,这样直接返回字符串,是不行的。存储过程直接返回,只能返回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

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-14
存储过程应该有返回值的,
问题应该出现在你vb6的调用语句中(第二个参数是输出类型的参数,
是否有正确设置).
你可以在查询分析器中执行此存储过程,
看看返回的结果.
还有,
此存储过程中的select语句最好加上top
1限制,
因为你只要判断是否能选到结果而已:
select
top
1
*
from
tb_package
where
packagenumber=@a

在sql select 语句中 如何获取 存储过程的返回值
SQL Server中存储过程的返回值不是通过return语句返回的(return语句是在用户自定义函数中使用的),而是通过存储过程的参数来返回,在定义存储过程的参数时使用关键字output来指定此参数是返回值。而在调用存储过程时,也必须使用关键字给接收返回值的变量,这样才能在调用时获得存储过程的返回值。示例:create ...

SQL 获取存储过程返回值
exec usp_statistics @a,@b,@c 这样@a @b @c的值就是执行存储过程后,传出来的值了

在sql Server中~如何利用RETURN返回存储过程的值~~~
1.存储过程使用return语句返回值.此种情况下,接收该存储过程值的方法是:delcare @ReturnValue int \/*(与存储过程return语句返回值的类型相同)*\/ exec @ReturnValue = StoredProc \/*StoredProc为一个存储过程*\/ 2.存储过程使用OUTPUT输出参数.此种情况下,直接使用OUTPUT输出参数即可:...

sql存储过程怎么返回string类型的返回值?怎么返回多个值?
你在存储过程里设置@ReturnValue的值就行了。VB里运行存储过程,然后访问ReturnValue参数就行了。2、如果是返回多列数据,就直接在存储过程里select表,VB里运行存储过程后,可以获取返回表。

SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的...
通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。 上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。 引用: Create PROC upGetUserInfos @intUserGroup INT AS BEGIN -- 从数据库...

sql 存储过程,返回数据集 并返回总行数
1、打开SQL Server Management Studio找到存储过程所在的数据库。在对象资源管理器详细信息中可以看到存储过程的文件夹。2、点击打开这个文件夹可以,在搜索中输入要搜索的存储过程名称。3、同样也可以在数据库目录结构处选择存储过程右键菜单中的筛选设置。4、在这里可以进行详细的条件筛选设置。将需要查看的...

sql 存储过程中return的使用方法?
当在存储过程中使用 RETURN 语句时,此语句可以指定返回给调用应用程序、批处理或过程的整数值。如果 RETURN 未指定值,则存储过程返回 0。大多数存储过程按常规使用返回代码表示存储过程的成功或失败。没有发生错误时存储过程返回值 0。任何非零值表示有错误发生。调用存储过程的应用程序可以将返回代码所...

SQL Server 在一个存储过程中调用另外一个存储过程获取返回值,出现报 ...
1);EXEC 执行SQL语句 declare @rsql varchar(250)declare @csql varchar(300)declare @rc nvarchar(500)declare @cstucount int declare @ccount int set @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'=''否'') and ClassroomType...

delphi 中如何使用sql 存储过程的返回值
写query控件SQL语句的时候这样写:Declare @r int Exec @r = myProc Select @r as result 然后Open,用FieldByNmae读取result字段的值

php pdo MSSQL 存储过程 return值怎么取得
存储过程取值一般需要使用游标,对游标循环操作一下

相似回答