使用Xml数据更新表

时间:2012-02-21 10:04:30

标签: c# sql-server

我编写了一个存储过程来更新CongTrinhCD表格中的2列CongTrinhTCBangPhuTroiGioDay_GiangVien,如下所示:

CREATE proc [dbo].[cust_BangPhuTroiGioDay_GiangVien_Luu]       
   @XmlData ntext      
as      
begin      
  declare @iDoc int ,@ReVal int          

  BEGIN TRANSACTION        

    exec sp_xml_preparedocument @iDoc output, @XmlData      

    update BangPhuTroiGioDay_GiangVien  
    set  BangPhuTroiGioDay_GiangVien.CongTrinhCD = a.CTCD,     
         BangPhuTroiGioDay_GiangVien.CongTrinhTC = a.CTTC  
    from (      
      select   
          MaQuanLy as MaQL,CongTrinhCD as CTCD,CongTrinhTC as CTTC    
      from openxml(@iDoc,'Root/BangPhuTroi') 
      with (MaQuanLy varchar(20),CongTrinhCD int,CongTrinhTC int)            
   ) a      
  where BangPhuTroiGioDay_GiangVien.MaQuanLy= a.MaQL     

  set @ReVal = @@error      
  if(@ReVal<>0)        
   begin        
    rollback tran        
    return        
   end         
 commit tran        
 select @ReVal        
 return        

end 

当我使用参数执行存储过程时:

exec dbo.cust_BangPhuTroiGioDay_GiangVien_Luu
        @XmlData=N'<Root>
                       <BangPhuTroi MaQuanLy="70100G05.000015" CongTrinhCD ="50"
                              CongTrinhTC="10"></BangPhuTroi> 
                       <BangPhuTroi MaQuanLy="70100G07.000015" CongTrinhCD ="70"
                              CongTrinhTC="20"></BangPhuTroi>
                       <BangPhuTroi MaQuanLy="70100G07.000052" CongTrinhCD ="80" 
                              CongTrinhTC=""></BangPhuTroi>
                   </Root>'

我希望更新后的结果是:

MaQuanLy="70100G07.000015" CongTrinhCD ="70" CongTrinhTC="20"

但结果更像是这样:

MaQuanLy="70100G05.000015" CongTrinhCD ="50" CongTrinhTC="10"

我不知道为什么?可以帮我?谢谢大家。

1 个答案:

答案 0 :(得分:1)

您确定要查看正确的行吗? MaQuanLy值在两行之间是不同的。