日期:2014-05-18  浏览次数:20391 次

sqlxml,高手请进!急急急急急急急急急急急急急急
问题描述:现在每天有20多个xml文件产生,一个就是条数据,现在要把每天产生的数据导入到sql里面;
例如其中一个xml文件内容如下所示:
<?xml version="1.0" encoding="GB2312" ?> 
- <FLIGHT>
  <DATETIME>2007-11-22 09:27:04</DATETIME> 
  <METHOD>MOD</METHOD> 
  <TYPE>A</TYPE> 
- <FLIGHTINFOR>
  <FLIGHTATTR>21</FLIGHTATTR> 
  <FLIGHTTYPE>0</FLIGHTTYPE> 
  <AIRCRAFTTYPE>E145</AIRCRAFTTYPE> 
  <REGISTRATION>3062</REGISTRATION> 
  <FLIGHTNUMBER>CZ3321</FLIGHTNUMBER> 
  <PRIMARYFLT /> 
  <RELATEDFLT /> 
  <FLIGHTSTATUS>COM</FLIGHTSTATUS> 
  <PORTNO /> 
- <FLIGHTDATETIME>
  <PLANDATE>2007-11-22</PLANDATE> 
  <ADT /> 
  <EDT>2007-11-22 10:33:00</EDT> 
  <SDT>2007-11-22 09:30:00</SDT> 
  </FLIGHTDATETIME>
- <STATION>
  <ORIGIN>CAN</ORIGIN> 
  <DESTINATION>YIH</DESTINATION> 
  <VIA /> 
  </STATION>
  </FLIGHTINFOR>
- <DEP>
- <CHECKIN>
  <COUNTEROPENDT /> 
  <COUNTER /> 
  </CHECKIN>
  <DEPTERMINAL /> 
  <GATE /> 
  </DEP>
- <ARR>
  <BELT>1</BELT> 
  </ARR>
  </FLIGHT>
2,现在的问题是要把这些数据导入到sql数据库里面的一个表里(xml数据结构与sql数据库表结构不一致)
备注:最好是有工具之类的导入的(写程序太老火),我研究了2天了,对sqlxml还是不能完全了解,知道有这个批量导入xml的功能
  如果有那位高手以前做个这样的项目,请发一个详细的做法,或者用那个工具及其怎么试用。非常感谢
本人qq:22602028(上班时间都在线)非常感谢!


------解决方案--------------------
SQL code
declare @xml xml
set @xml='<FLIGHT> 
    <DATETIME> 2007-11-22   09:27:04 </DATETIME>   
    <METHOD> MOD </METHOD>   
    <TYPE> A </TYPE>   
    <FLIGHTINFOR> 
    <FLIGHTATTR> 21 </FLIGHTATTR>   
    <FLIGHTTYPE> 0 </FLIGHTTYPE>   
    <FLIGHTDATETIME> 
    <PLANDATE> 2007-11-22 </PLANDATE>   
    <ADT   />   
    <EDT> 2007-11-22   10:33:00 </EDT>   
    <SDT> 2007-11-22   09:30:00 </SDT>   
    </FLIGHTDATETIME> 
    </FLIGHTINFOR> 
    </FLIGHT>'

SELECT    testByjinjazz.value('DATETIME[1]', 'DATETIME') DATETIME,
        testByjinjazz.value('METHOD[1]', 'nvarchar(10)') METHOD,
        testByjinjazz.value('TYPE[1]', 'nvarchar(10)') TYPE,
        testByjinjazz.value('FLIGHTINFOR[1]/FLIGHTATTR[1]','int') FLIGHTATTR,
        testByjinjazz.value('FLIGHTINFOR[1]/FLIGHTTYPE[1]','int') FLIGHTTYPE,
        testByjinjazz.value('FLIGHTINFOR[1]/FLIGHTDATETIME[1]/PLANDATE[1]','nvarchar(10)') PLANDATE,
        testByjinjazz.value('FLIGHTINFOR[1]/FLIGHTDATETIME[1]/ADT[1]','DATETIME') ADT,
        testByjinjazz.value('FLIGHTINFOR[1]/FLIGHTDATETIME[1]/EDT[1]','DATETIME') EDT,
        testByjinjazz.value('FLIGHTINFOR[1]/FLIGHTDATETIME[1]/SDT[1]','DATETIME') SDT
FROM   @xml.nodes('//FLIGHT') AS R(testByjinjazz)

/*
DATETIME                METHOD     TYPE       FLIGHTATTR  FLIGHTTYPE  PLANDATE   ADT                     EDT                     SDT
----------------------- ---------- ---------- ----------- ----------- ---------- ----------------------- ----------------------- -----------------------
2007-11-22 09:27:04.000  MOD        A         21          0            2007-11-2 1900-01-01 00:00:00.000 2007-11-22 10:33:00.000 2007-11-22 09:30:00.000

(1 行受影响)
*/

------解决方