| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 657 人关注过本帖
标题:奇怪的存储过程?
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏
 问题点数:0 回复次数:9 
奇怪的存储过程?
我今天上班的时候,建立的存储过程,我在公司测试的时候,好像是有结果的。能返回最大值的。
但我刚才在家的电脑上测试的时候,好像有问题。
这个过程在SQL分析器建立的。
CREATE PROCEDURE [dbo].[P_Max]
@a int,
@b int,
@R int output
AS
if(@a>@b)
set @R=@a
else
set @R=@b
GO
--调用
declare @R1 int
exec P_Max 12,3,@R1 output
select @R1
--值12
*--VFP调用
r1=0
?SQLEXEC(nhandle,'exec dbo.P_Max 1,100,?@R1 output')
?r1
**都是0,
不知道那里出了问题?我明天再在单位上的电脑测试??
我为什么要用存储过程返回值呢?而不在VFP直接查询呢 SQLEXEC(nhandle,str,'tab'),因为这样用用到临时表tab,如果用SCAN...ENDSCAN来处理数据的,临时表会影响到SCAN的表指针。
所以我选择用过程的返回值OUTPUT.


[ 本帖最后由 mywisdom88 于 2015-8-11 13:58 编辑 ]
2015-08-10 23:16
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
好像都是SQL2000
2015-08-10 23:19
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我上班的电脑,测试OK,如下图,那里出问题了。我家的电脑是错误。
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-08-11 09:25
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
[local]1[/local][local]2[/local]

[ 本帖最后由 mywisdom88 于 2015-8-11 09:58 编辑 ]
2015-08-11 09:31
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-08-11 09:59
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
TEXT TO str_p_max NOSHOW TEXTMERGE PRETEXT 4

ALTER PROCEDURE [dbo].[P_Max]
@a int,
@b int,
@R int output
AS

if(@a>@b)
set @R=@a
else
set @R=@b
RETURN @R
ENDTEXT

?SQLEXEC(nhandle,str_p_max)

*--调用
*declare @R1 int
*exec P_Max 12,3,@R1 output
*select @R1

*--VFP调用
r1=0
a1=1
b1=100
?SQLEXEC(nhandle,'exec dbo.P_Max ?a1,?b1,?@R1 output')
?r1

*今天网上找的,用CALL
r2=0
a2=1
b2=200
?SQLEXEC(nhandle,"{call dbo.P_Max(?a2,?b2,?@R2)}")
?r2
SQLDISCONNECT(nhandle)
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-08-11 13:49
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
没人回贴,自己搞好了。
总结以下:SQL2000+VFP9.0 SP1

ALTER PROCEDURE [dbo].[P_Max]
@a int,
@b int,
@R int output
AS

if(@a>@b)
set @R=@a
else
set @R=@b
--RETURN @R
ENDTEXT

?SQLEXEC(nhandle,str_p_max)

*--调用
*declare @R1 int
*exec P_Max 12,3,@R1 output
*{call P_Max(121,522,@R1 output)}
*select @R1
*我的理解,用EXEC 过程名 参数1,参数2,参数n,..OUTPUT;不能带()
*用{CALL 过程名(参数1,参数2,参数n,..OUTPUT)};一定要带()


*--VFP调用
RELEASE r1,a1,b1,r2,a2,b2
r1=0
a1=1
b1=1001
?SQLEXEC(nhandle,'exec dbo.P_Max ?a1,?b1,?@R1') &&不要OUTPUT
?r1

*今天网上找的,用CALL
r2=0
a2=1
b2=200
?SQLEXEC(nhandle,"{call dbo.P_Max(?a2,?b2,?@R2)}")  &&不要OUTPUT
?r2
2015-08-14 10:47
sjjkgusk
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2013-3-28
收藏
得分:0 
收录了,大侠
2015-09-06 14:15
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
只是加个CALL 就好了吗?
2015-09-06 16:03
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
有2种方法:
1、用EXEC
SQL中使用
EXEC 过程名 @参数1,@参数2,@参数N,@返回值 OUTPUT
VFP调用
=SQLEXEC(nhandle,'exec dbo.P_Max ?a1,?b1,?@R1') &&不要OUTPUT

2、用CALL
"{CALL 过程名(@参数1,@参数2,@参数N,@返回值 OUTPOU)}"
VFP调用
=SQLEXEC(nhandle,"{call dbo.P_Max(?a2,?b2,?@R2)}")  &&不要OUTPUT

[ 本帖最后由 mywisdom88 于 2015-9-6 16:42 编辑 ]
2015-09-06 16:41
快速回复:奇怪的存储过程?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029995 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved