为什么我的存储过程没有执行结果,也就是表中的记录没有被updata掉呀?
CREATE  PROCEDURE LB_XL
(
@i_tabname varchar(30),              
@i_bhzid varchar(8),                  
@i_mj varchar(30)                     
)
AS
      DECLARE 
             @i_lb integer,                
    @c_lb varchar(20),       
    @i_bhz integer,             
    @sql1 nvarchar(400),
             @sql2 nvarchar(600)
set @sql1='select @a=count(*)  from '+@i_tabname+ ' where  bhzid=' +@i_bhzid
exec sp_executesql @sql1,N'@a int output',@i_bhz outputIF(@i_bhz>=0)
  BEGIN
     select @i_lb=count(distinct A.name)  from A where A.bhzid=@i_bhzid
     
     WHILE @i_lb >0
BEGIN
                set @c_lb =cast(@i_lb as varchar(20))
                set @sql2= 'update A set '+@i_mj+'=isnull((select sum(ltarea) as area from '+@i_tabname+' where (lbid='+@c_lb+') and (bhzid='+@i_bhzid+')),0)  where (name='+@c_lb+') and (bhzid='+@i_bhzid+')'
                   exec (@sql2)
set @i_lb=@i_lb - 1 
END
  ENDGO

解决方案 »

  1.   

    我使用下面的在查询分析器中试过了有结果的,记录被update了
    DECLARE 
                 @i_lb integer,                
        @c_lb varchar(20),       
        @i_bhz integer,             
        @sql1 nvarchar(400),
                 @sql2 nvarchar(600),             @i_tabname varchar(20),
                 @i_bhzid varchar(3),
                 @i_mj varchar(20)
       set @i_tabname='YY'
       set @i_bhzid='02'
       set @i_mj='YYmj'set @sql1='select @a=count(*)  from '+@i_tabname+ ' where  bhzid=' +@i_bhzid
    exec sp_executesql @sql1,N'@a int output',@i_bhz outputIF(@i_bhz>=0)
      BEGIN
         select @i_lb=count(distinct A.name)  from A where A.bhzid=@i_bhzid
         
         WHILE @i_lb >0
    BEGIN
                    set @c_lb =cast(@i_lb as varchar(20))
                    set @sql2= 'update A set '+@i_mj+'=isnull((select sum(ltarea) as area from '+@i_tabname+' where (lbid='+@c_lb+') and (bhzid='+@i_bhzid+')),0)  where (name='+@c_lb+') and (bhzid='+@i_bhzid+')'
                       exec (@sql2)
    set @i_lb=@i_lb - 1 
    END
      END
    但是使用查询分析器调试怎么都没有结果,记录一个都没有被update了
      

  2.   

    例如:
    DECLARE
    @i_tabname varchar(30),
    @i_bhzid varchar(8),
    @i_mj varchar(30)
    set @i_tabname='YY'
    set @i_bhzid='02'
    set @i_mj='YYmj'exec LB_XL @i_tabname, @i_bhzid, @i_mj
      

  3.   

    你可以在执行的时候,打开profiler来查看存储是否执行
      

  4.   

    加了commit就好了
    谢谢各位!!!