如何在存储过程中调用另一存储过程?

sdyttb 2011-02-08 08:43:09

以下两个存储过程mycs和mycsa,请问如何在mycsa中调用mycs,谢谢!


CREATE PROCEDURE mycs
@abc int
AS

BEGIN
if @abc>10
begin
RETURN 0
end
else
begin
RETURN 1
end
END



CREATE PROCEDURE mycsa
@abc int output
AS

BEGIN
-- 调用mycs过程,如果此过程返回0则set @abc=300,否则set @abc=3000。
END


...全文
219 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdyttb 2011-02-18
  • 打赏
  • 举报
回复
CREATE PROCEDURE mycs
@abc int,
@ret int output

AS

BEGIN
if @abc>10
begin
set @ret=0
end
else
begin
set @ret=1
end
END



CREATE PROCEDURE mycsa
@abc int output
AS

BEGIN
declare @val int
declare @abcd int
set @abcd=10
exec mycs @abcd,@val
set @abc=@val
END
以上程序结果是@abc=空,请问如何写此过程?
sdyttb 2011-02-14
  • 打赏
  • 举报
回复
谢谢1楼的Linares和4楼的qianjin036a,你们的程序是对的,是我的大意使程序无法运行!
其他朋友的程序可能也是正确的,不过我没测试,在此也谢谢了!祝朋友们情人节快乐!
abuying 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sdyttb 的回复:]

引用 9 楼 acupofnescafe 的回复:
CREATE PROCEDURE mycs
@abc int,
@ret int output

AS

BEGIN
if @abc>10
begin
set @ret=0
end
else
begin
set @ret=1
end
END



CREATE PROCE……
[/Quote]

declare @abcd int

之后没赋值!应该使用 set @abcd=值
sdyttb 2011-02-14
  • 打赏
  • 举报
回复
上面的程序在declare @abcd intt和exec mycs @abcd,@val 之间插入set @abcd=10
sdyttb 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 acupofnescafe 的回复:]
CREATE PROCEDURE mycs
@abc int,
@ret int output

AS

BEGIN
if @abc>10
begin
set @ret=0
end
else
begin
set @ret=1
end
END



CREATE PROCEDURE mycsa
@abc int output
AS

BEGIN
declare @val int
declare @abcd int


exec mycs @abcd,@val
set @abc = case @val when 0 then 300 else 3000 end
END
[/Quote]
对于此程序我测试过,结果不对,我用set @abc=@val测试,得到的值为空,即使用set @abc =@val+1测试,得到的也是空!
rd16 2011-02-09
  • 打赏
  • 举报
回复
楼主查一下数据表和存储过程的"所有者"是不是一致,MSSQL远程操作会出现这种问题。
幸运的意外 2011-02-09
  • 打赏
  • 举报
回复
CREATE PROCEDURE mycs
@abc int,
@ret int output

AS

BEGIN
if @abc>10
begin
@ret=0
end
else
begin
@ret=1
end
END



CREATE PROCEDURE mycsa
@abc int output
AS

BEGIN
declare @val int
exec mycs @abc,@val
set @abc = case @val when 0 then 300 else 3000 end
END

楼上的代码应该没有问题的呀。
-晴天 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sdyttb 的回复:]
朋友,还是不行啊……
提示还是如下啊!
无法为当前对象而将行添加到 sysdepends,因为此对象所依赖的对象 'mycs' 缺失。仍将创建此对象。
[/Quote]
先建mycs,在同一数据库下另建mycsa.

或者把我上面4楼的语句全部复制过去,执行一下试试?
快溜 2011-02-08
  • 打赏
  • 举报
回复
你怎么写的,贴出来看看。
sdyttb 2011-02-08
  • 打赏
  • 举报
回复
朋友,还是不行啊……
提示还是如下啊!
无法为当前对象而将行添加到 sysdepends,因为此对象所依赖的对象 'mycs' 缺失。仍将创建此对象。
duanzhi1984 2011-02-08
  • 打赏
  • 举报
回复
CREATE PROCEDURE mycs
@abc int,
@ret int output

AS

BEGIN
if @abc>10
begin
@ret=0
end
else
begin
@ret=1
end
END



CREATE PROCEDURE mycsa
@abc int output
AS

BEGIN
declare @val int
exec mycs @abc,@val
set @abc = case @val when 0 then 300 else 3000 end
END
-晴天 2011-02-08
  • 打赏
  • 举报
回复
CREATE PROCEDURE mycs
@abc int
AS
BEGIN
if @abc>10
RETURN 0
else
RETURN 1
END
go
CREATE PROCEDURE mycsa
@abc int output
AS
BEGIN
-- 调用mycs过程,如果此过程返回0则set @abc=300,否则set @abc=3000。
declare @val int
exec @val = mycs @abc
set @abc = case @val when 0 then 300 else 3000 end
select @abc
END
go
exec mycsa 1
/*
-----------
3000

(1 行受影响)
*/
exec mycsa 100
/*
-----------
300

(1 行受影响)
*/
go
drop procedure mycs,mycsa
快溜 2011-02-08
  • 打赏
  • 举报
回复
这个用函数好一点。
sdyttb 2011-02-08
  • 打赏
  • 举报
回复
朋友,在过程中点击执行出现以下提示:

无法为当前对象而将行添加到 sysdepends,因为此对象所依赖的对象 'mycs' 缺失。仍将创建此对象。
Linares 2011-02-08
  • 打赏
  • 举报
回复
CREATE PROCEDURE mycsa
@abc int output
AS

BEGIN

declare @val int
-- 调用mycs过程,如果此过程返回0则set @abc=300,否则set @abc=3000。
exec @val = mycs @abc
set @abc = case @val when 0 then 300 else 3000 end

END

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧