XML 操作,列转行 (自个儿做留念,送分给大家)

XML 操作,列转行 (自己做留念,送分给大家)

-- =============================================
-- Author: gguozhenqian
-- Create date: 2012-03-12
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE up_UpdateFlightStatusBat
@Xml xml
AS
BEGIN 
 
    ;WITH FlightStatus AS (
    SELECT 
M.a.value('@ID','int') AS id, 
M.a.value('@KeyWord','varchar(50)') AS keyword,
M.a.value('@DateTime','datetime') AS datetime  
   FROM  @XML.nodes('/elements/element') M(a)  
  ) 
  --列转行
  select * INTO #flightStatus from FlightStatus as t pivot(max(datetime) for keyword IN
  ([FlightOffTime],[FlightDoorCloseTime],FlightOnTime,FlightOutTime,FlightInTime) ) AS pvt
 
--FlightOffTime  FlightDoorCloseTime FlightOnTime FlightOutTime FlightInTime
   
  --更新相对应字段的时间
   UPDATE FlightInfo WITH(ROWLOCK, UPDLOCK)
  SET FlightOffTime= b.FlightOffTime 
 FROM FlightInfo a,#flightStatus b
 WHERE a.FlightInfoID=b.id AND a.FlightOffTime IS NULL AND b.FlightOffTime IS NOT null
 
   UPDATE FlightInfo WITH(ROWLOCK, UPDLOCK)
  SET FlightDoorCloseTime= b.FlightDoorCloseTime 
 FROM FlightInfo a,#flightStatus b
 WHERE a.FlightInfoID=b.id AND a.FlightDoorCloseTime IS NULL AND b.FlightDoorCloseTime IS NOT NULL
 
   UPDATE FlightInfo WITH(ROWLOCK, UPDLOCK)
  SET FlightOnTime= b.FlightOnTime 
 FROM FlightInfo a,#flightStatus b
 WHERE a.FlightInfoID=b.id AND a.FlightOnTime IS NULL AND b.FlightOnTime IS NOT null
 
   UPDATE FlightInfo WITH(ROWLOCK, UPDLOCK)
  SET FlightOutTime= b.FlightOutTime 
 FROM FlightInfo a,#flightStatus b
 WHERE a.FlightInfoID=b.id AND a.FlightOutTime IS NULL AND b.FlightOutTime IS NOT NULL
 
   UPDATE FlightInfo WITH(ROWLOCK, UPDLOCK)
  SET FlightInTime= b.FlightInTime 
 FROM FlightInfo a,#flightStatus b
 WHERE a.FlightInfoID=b.id AND a.FlightInTime IS NULL AND b.FlightInTime IS NOT null
 
drop TABLE #flightStatus
END





--测试  
DECLARE @xml xml
SET @xml='<elements>
      <element ID="1" KeyWord="lightOffTime" DateTime="2012-01-02" />
      <element ID="2" KeyWord="FlightOffTime" DateTime="2012-01-02" />
      <element ID="5" KeyWord=FlightDoorCloseTime DateTime="2012-01-02" />
      <element ID="4" KeyWord="FlightOffTime" DateTime="2012-01-02" />
      <element ID="1" KeyWord=FlightOnTime DateTime="2012-01-02" />
      <element ID="6" KeyWord="FlightOffTime" DateTime="2012-01-02" />
      <element ID="7" KeyWord=FlightOutTime DateTime="2012-01-02" />
      <element ID="3" KeyWord="FlightOffTime" DateTime="2012-01-02" /> 
</elements>'
exec up_UpdateFlightStatusBat @xml

------解决方案--------------------
真小气,总共才20分。!!!!!!!不过,学习到东西是好的。哈哈!分数不重要。
------解决方案--------------------
谢谢分享!
------解决方案--------------------
感谢分享.
------解决方案--------------------
XML 操作,列转行 (自个儿做留念,送分给大家)