2012-02-21 55 views
0

我寫了一個存儲過程來更新我的BangPhuTroiGioDay_GiangVien表2列CongTrinhCDCongTrinhTC這樣的:使用XMLDATA更新表

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

您確定您正在查看正確的行嗎? MaQuanLy值在兩行之間不同。

+0

我敢肯定,我希望它更新xmlData.But中的最後一行,但它只更新第一行。你能幫我嗎? – Khanh 2012-02-22 07:19:26