Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将XML分解到SQLServer2008表中_Sql Server_Xml - Fatal编程技术网

Sql server 将XML分解到SQLServer2008表中

Sql server 将XML分解到SQLServer2008表中,sql-server,xml,Sql Server,Xml,我很难弄清楚如何在数据库中将XML字符串拆分为列。我有一个如下所示的XML字符串。我想知道使用SQLServer2008实现这一点的最有效方法 <DATA> <Message Action="UPDATE" MessageDate="2015-06-27T19:91:00" Type="TXT" ControlID="Q385906345T373566011"/> <Facility FacilityCode="ORBIT" FacilityDescri

我很难弄清楚如何在数据库中将XML字符串拆分为列。我有一个如下所示的XML字符串。我想知道使用SQLServer2008实现这一点的最有效方法

<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
,。。。等等。

研究XML数据类型的SQL Server方法,并学习一些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

您是否可以添加预期的表格格式resultAction类型事件事务ID更新TXT P03 2250382928,这是完美的。。。这回答了我的问题。对xquery/path材料有什么建议吗?
| Action | Type | Event | TransactionID |
|--------|------|-------|---------------|
| UPDATE |  TXT |   P03 |    2250382928 |