日期:2014-05-18  浏览次数:20742 次

一个存储过程嵌套调用问题?
CREATE   PROCEDURE   [dbo].[P1]
(
          @ID   VARCHAR(36),
          @IsAudit     BIT,
          @GuID   VARCHAR(36)= ' '
)  

AS
BEGIN
IF   EXISTS(SELECT   1   FROM   A1   WHERE   ID=@ID)   and   @IsAudit=1
BEGIN
    SET   @GuID   =   NewID()
    INSERT   INTO   B1(ID,Name)
    SELECT   @GuID,Name   FROM   A1     WHERE   ID=@ID

    INSERT   INTO   B2(ID,Number,Price)
    SELECT   @GuID,Number,Price   FROM     A2     a   where   ID=@ID
    END

    EXEC   P2   @GuID,   @IsAudit
END

CREATE   PROC   dbo.[P2]
(@ID   varchar(36),
  @IsAudit   bit
)
AS
--下面省略了很多条件与内容
BEGIN
        INSERT   INTO   D        
        SELECT   B1.*      
            FROM   B1   WHERE   B1.ID   =   @ID  
END

问题:在存储过程P1中,EXEC   P2   @GuID,@IsAudit这句前的对B1,B2表的插入正常,但进入P2后,对表D的插入则没有进行,是锁的问题还是其他问题,导致在B1中新插入的数据在P2中访问不到?

------解决方案--------------------
应该能访问到的。
------解决方案--------------------
使用PRINT or SELECT 一段一段的来调式看看。
没有数据无法说明问题出在哪里。