我很难弄清楚如何将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>
提前谢谢
以下是我收到的数据,我正试图找到一种方法将其解析为FacilityCode
,EmployeeLastName
,DepartmentCode
等等。
答案 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 |