2012-02-21 2 views
0

を更新するために、私はこのように私のBangPhuTroiGioDay_GiangVien表に2列CongTrinhCDCongTrinhTCを更新するストアドプロシージャを書いた:使用XMLDATAは、テーブル

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>' 

:私はパラメータを持つストアドプロシージャを実行すると

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 

更新後の結果が

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

の結果は次のようになります。

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

なぜわかりませんか?私を助けることができますか?皆さんありがとう。

答えて

1

正しい行が表示されていますか? MaQuanLyの値は2つの行で異なります。

+0

私は確信しています。xmlDataの最後の行を更新したいのですが、最初の行のみを更新します。 – Khanh

関連する問題