存储过程嵌套使用技巧

第一步

create table a

( fid numeric(10),

fno varchar(10),

fname varchar(50)

)

 

insert into a

values(1,'1','1')

 

第二步

IF EXISTS (SELECT name FROM sysobjects WHERE  name = 'p_c' AND type = 'P')

    DROP PROCEDURE p_c

GO

CREATE PROCEDURE p_c

AS

       SELECT * from a

GO

EXECUTE p_c

GO

 

第三

IF EXISTS (SELECT name FROM sysobjects WHERE  name = 'p_b' AND type = 'P')

    DROP PROCEDURE p_b

GO

CREATE PROCEDURE p_b

AS

IF EXISTS(SELECT name FROM sysobjects WHERE  name = N'b' AND type = 'U')

    DROP TABLE b

       create table b

       (

       fid numeric(10),

       fno varchar(10),

       fname varchar(50)

       )

       insert into b exec p_c

       select * from b

GO

EXECUTE p_b

GO

 

第四

IF EXISTS (SELECT name FROM sysobjects WHERE  name = 'p_a' AND type = 'P')

    DROP PROCEDURE p_a

GO

CREATE PROCEDURE p_a

AS

       create table #c

       (

       fid numeric(10),

       fno varchar(10),

       fname varchar(50)

       )

       insert into #c exec p_b

       select * from #c

GO

EXECUTE p_a

GO

 

问题,在第三步的时候没有问题的,但到了第四步的时候却提示

  服务器: 消息 8164,级别 16,状态 1,过程 p_b,行 17

  INSERT EXEC 语句不能嵌套。

 (所影响的行数为 0 行)

 (所影响的行数为 0 行)

各位有什么高见!

 

Answer:

把第二层改为function

--第一

create table a

(fid numeric(10),

fno varchar(10),

fname varchar(50)

)

 

insert into a

values(1,'1','1')

 

--第二步

CREATE FUNCTION p_c ()

RETURNS @a TABLE

   (

fid numeric(10),

fno varchar(10),

fname varchar(50)

)

 

AS

BEGIN

   INSERT @a

        SELECT * FROM a

 RETURN

END

 

--第三

IF EXISTS (SELECT name FROM sysobjects WHERE  name = 'p_b' AND type = 'P')

    DROP PROCEDURE p_b

GO

CREATE PROCEDURE p_b

AS

 

set nocount on

 

IF EXISTS(SELECT name FROM sysobjects WHERE  name = N'b' AND type = 'U')

    DROP TABLE b

       create table b

       (

       fid numeric(10),

       fno varchar(10),

       fname varchar(50)

       )

       insert into b SELECT *  from p_c ()

       select * from b

GO

EXECUTE p_b

 

--第四

IF EXISTS (SELECT name FROM sysobjects WHERE  name = 'p_a' AND type = 'P')

    DROP PROCEDURE p_a

GO

CREATE PROCEDURE p_a

AS

set nocount on

 

       create table #c

       (

       fid numeric(10),

       fno varchar(10),

       fname varchar(50)

       )

       insert into #c exec p_b

       select * from #c

GO

EXECUTE p_a

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值