将XML粉碎成SQL Server 2008表

时间:2015-07-12 03:07:43

标签: sql-server xml

我很难弄清楚如何将XML字符串拆分成数据库中的列。我有一个XML字符串,如下所示。我很想知道使用SQL Server 2008最有效的方法。

<DATA>
   <Message Action="UPDATE" MessageDate="2015-06-27T19:91:00" Type="TXT" ControlID="Q385906345T373566011"/>
   <Facility FacilityCode="ORBIT" FacilityDescription="Sending Facility"/>
   <SourceSystem HISCode="MILLENNIUM" Description="TKNOWN3"/>
   <EVN Event="P03" Recorded="2015-06-27T00:00:00"/>
   <EMPLOYEE>
      <Employee BirthDate="2014-08-09T00:00:00" Gender="F" MarkedForDelete="0" LastName="CASTILLO" FirstName="TIMA"  Type="MILLE_1367289"/>
   </EMPLOYEE>
   <SUB1>
   <Encounter MarkedForDelete="0" A03Received="0">
      <Location CARE="SUR-R6"/>
   </Encounter>
   </PV1>
   <FT1 SetID="1" TransactionID="2250382928" Date="2015-06-27T00:00:00" Type="CG" Code="74020" Description="DX V" Quantity="1" DepartmentCode="RAA">
      <ProcedureCodeModifier ModifierID="16"/>
      <PerfBy PerfByCode="17300" PerfByFamilyName="Chap" PerfByGivenName="Teresa"/>
      <OrdBy OrdCode="32289" OrdLastName="Hofman" OrdFirstName="Sarah"/>
   </FT1>
</DATA>

提前谢谢

以下是我收到的数据,我正试图找到一种方法将其解析为FacilityCodeEmployeeLastNameDepartmentCode等等。

1 个答案:

答案 0 :(得分:1)

查看XML数据类型的SQL Server value()方法并学习一些XQuery / XPath表达式。这是演示的一个工作示例:

declare @xml XML = '<DATA>
   <Message Action="UPDATE" MessageDate="2015-06-27T19:91:00" Type="TXT" ControlID="Q385906345T373566011"/>
   <Facility FacilityCode="ORBIT" FacilityDescription="Sending Facility"/>
   <SourceSystem HISCode="MILLENNIUM" Description="TKNOWN3"/>
   <EVN Event="P03" Recorded="2015-06-27T00:00:00"/>
   <EMPLOYEE>
      <Employee BirthDate="2014-08-09T00:00:00" Gender="F" MarkedForDelete="0" LastName="CASTILLO" FirstName="TIMA"  Type="MILLE_1367289"/>
   </EMPLOYEE>
   <PV1>
   <Encounter MarkedForDelete="0" A03Received="0">
      <Location CARE="SUR-R6"/>
   </Encounter>
   </PV1>
   <FT1 SetID="1" TransactionID="2250382928" Date="2015-06-27T00:00:00" Type="CG" Code="74020" Description="DX V" Quantity="1" DepartmentCode="RAA">
      <ProcedureCodeModifier ModifierID="16"/>
      <PerfBy PerfByCode="17300" PerfByFamilyName="Chap" PerfByGivenName="Teresa"/>
      <OrdBy OrdCode="32289" OrdLastName="Hofman" OrdFirstName="Sarah"/>
   </FT1>
</DATA>'

SELECT 
  @xml.value('(/DATA/Message/@Action)[1]', 'varchar(100)') as Action
  , @xml.value('(/DATA/Message/@Type)[1]', 'varchar(100)') as Type
  , @xml.value('(/DATA/EVN/@Event)[1]', 'varchar(100)') as Event
  , @xml.value('(/DATA/FT1/@TransactionID)[1]', 'varchar(100)') as TransactionID

<强> SQL Fiddle Demo

输出

| Action | Type | Event | TransactionID |
|--------|------|-------|---------------|
| UPDATE |  TXT |   P03 |    2250382928 |