線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1021
推到 Plurk!
推到 Facebook!

一个存储过程调用到另一个存诸过程(结合CURSOR)

尚未結案
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-26 17:49:56 IP:220.198.xxx.xxx 未訂閱
过程一中,调用到过程二。 =================过程一=============== CREATE PROCEDURE b1 ( @b1 varchar(20) ) AS begin execute a1 @b1 **这样写是可以实现,但无法对A1反回的数据集进行过滤处理 **DECLARE Temp_Cursor CURSOR LOCAL FOR exec ( a1 'a') **这样写是错的,但我想实现用CURSOR来接收返回值,可惜这样写出错,哪位大哥知道格式是怎样?恳请指点。 set end GO ============过程二============== CREATE PROCEDURE a1 ( @a1 varchar(20) ) AS begin select item_code,name,des from un_item where item_code like '%' @a1 '%' end GO
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-27 10:08:57 IP:220.198.xxx.xxx 未訂閱
没人回答? 自已顶一下。
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-27 17:04:07 IP:218.94.xxx.xxx 未訂閱
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO    ALTER   procedure GetTopUser 
@ID int,
@Name char(10) output
as
begin
set @Name=(Select UserName From MyUserInfo Where @ID)
end;    GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO    /******************************************/
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO    ALTER    procedure GetUserAge 
@ID int
as
begin
        declare @MyName char(10)
        exec GetTopUser @ID,@MyName output
        Select UserAge From MyUserInfo Where UserName=@MyName
end        GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO    /*************执行*************/
exec GetUserAge 1
/***********表*************/    CREATE TABLE [dbo].[MyUserInfo] (
        [UserName] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
        [UserID] [int] NULL ,
        [UserAge] [smallint] NULL 
) ON [PRIMARY]
GO    
如上所示,可以实现存储过程中调用存储过程。 你可以参考一下,主要用OutPut参数传递. 风花雪月
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-29 09:25:54 IP:220.198.xxx.xxx 未訂閱
你的例子是返回一个变量, 但如果要返回一个数据集怎么办。 (当然,我知道可以用临时表来实现在不现存储过程中实现) (有没有其它方法呢?如CURSOR 来接收返回的数据集)
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-29 09:53:09 IP:218.94.xxx.xxx 未訂閱
我想如果是返回一个记录集合,为什么不将SQL语句直接放在这个存储过程中了?!    对于存储过程间最常用或者最合适的方式莫过于采用ouput参数传递了,你也可以传递一个CURSOR试验一下 SET QUOTED_IDENTIFIER ON  GO SET ANSI_NULLS ON  GO    ALTER   procedure GetTopUser  @ID int, @CS CURSOR VARYING output as begin set @CS=CURSOR LOCAL SCROLL FOR (Select UserName From MyUserInfo Where @ID) end; GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
系統時間:2024-06-28 17:26:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!