首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

No changes made to database.解决办法

2012-12-16 
No changes made to database.我在后台写了一个触发器。在Sqlserver查询分析其中 可以正常 触发触发器。在前

No changes made to database.


我在后台写了一个触发器。  在Sqlserver查询分析其中 可以正常 触发触发器。在前台PB中报错:
No changes made to database.

INSERT INTO bom_mb ( temp_item_id, item_id, item_name, meas_unit, quantity, itemfac ) VALUES ( '04M001', 'Y3.0010', '镜背漆唐山威克', 'P', 1.000000, 'R' )

删除触发器后 就不报错误了、我怀疑是游标部分有点问题吧、同时希望各位指点我优化这个触发器。比如事物和执行效率方面。


CREATE trigger bom_mb_update            
on bom_mb for update             
as             
begin transaction            
Declare @temp_item_id VarChar(40),          
   @new_item_id  VarChar(40),          
 @old_item_id  VarChar(40),          
   @quantity     VarChar(40),          
   @itemfac      VarChar(40),      
   @pare_item_id  VarChar(40)         
Select @temp_item_id = temp_item_id, @new_item_id=item_id,          
       @quantity= quantity ,@itemfac= itemfac          
 from inserted            
          
Select @old_item_id = item_id from deleted          
          
if @itemfac <>'R'           
begin          
 update bom set item_id = @new_item_id, quantity = @quantity          
 where pare_item_id =  @temp_item_id          
 and item_id = @old_item_id          
end        
        
          
if @itemfac ='R'       
      
 --      
Declare pare_id_cursor  CURSOR for      
    select item_id from bom        
    where pare_item_id = @temp_item_id      
    For UPDATE OF item_id, quantity      
  Open pare_id_cursor  
   
        
  Fetch next from pare_id_cursor into @pare_item_id      
  WHILE @@FETCH_STATUS <> -1  
  begin     


     if (@@FETCH_STATUS = 0)  
    begin  
    print '@pare_item_id'+   @pare_item_id      
   update bom set item_id = @new_item_id, quantity = @quantity        
   where  item_id = @old_item_id          
   and pare_item_id = @pare_item_id      
     end   
 Fetch next from pare_id_cursor into @pare_item_id  
  end      
   
  close pare_id_cursor    
  deallocate pare_id_cursor     
            
if @@error != 0             
 begin            
 rollback transaction            
 return             
 end            
            
commit transaction            
return             
          
    
  

[最优解释]
试下@quantity decimal(18,6)
另外把print也去掉看看
[其他解释]
@quantity VarChar(40),   
-----------------------
可能是字段不匹配引起的
[其他解释]
同意楼上的
[其他解释]

引用:
@quantity VarChar(40),  
-----------------------
可能是字段不匹配引起的

谢谢
  @quantity     decimal(20), 我已经修改了、问题依旧。
[其他解释]
自己顶一下吧
[其他解释]
引用:
试下@quantity decimal(18,6)
另外把print也去掉看看


刚才那个错误提示  就是print产生的问题。 

去掉就不报错了, 但是没有触发 游标中的update语句
触发器 没有被触发,
下面的sql 在查询分析器里 可以触发。
update bom_mb
set item_id = 'Y3.0010'
where item_id = '040650'
and temp_item_id = '04M001'
[其他解释]
你写的触发器是for update   
又不是insert

热点排行
Bad Request.