2012-02-21 2 views
0

Я написал хранимую процедуру для обновления 2 колонки CongTrinhCD и CongTrinhTC в моей BangPhuTroiGioDay_GiangVien таблице, как это:Использование 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. Но она обновляет только первую строку. Можете ли вы мне помочь? – Khanh

Смежные вопросы