将信息从XML提取到SQL Server临时表

将信息从XML提取到SQL Server临时表,sql,sql-server,xml,Sql,Sql Server,Xml,我正在处理一些XML,我遇到了一个问题 xml如下所示: <tagvalues> <tagvalue> <tag>Data.Barcode</tag> <value>True</value> </tagvalue> <tagvalue> <tag>Data.DateStampFirstScale</tag> <value>

我正在处理一些XML,我遇到了一个问题

xml如下所示:

<tagvalues>
  <tagvalue>
    <tag>Data.Barcode</tag>
    <value>True</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.DateStampFirstScale</tag>
    <value>20180111</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.DateStampLastScale</tag>
    <value>20180111</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Dot</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Hangtab</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.Deviation</tag>
    <value>0</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.DeviationHigh</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.DeviationLimitHigh</tag>
    <value>0</value>
  </tagvalue>
</tagvalues>
我遇到的问题是,有时顺序会改变,这意味着我必须重新配置它

是否无法将XML文本转换为临时表,如下所示:

Tag                                     Value
--------------------------------------------------
Data.Barcode                            TRUE
Data.DateStampFirstScale                20180111
Data.DateStampLastScale                 20180111
Data.Dot                                FALSE
Data.Hangtab                            FALSE
Data.Scale_x.Scale_0.Deviation          0
Data.Scale_x.Scale_0.DeviationHigh      FALSE
Data.Scale_x.Scale_0.DeviationLimitHigh 0
你是说像这样

DECLARE @XML xml;
SET @XML = 
'<tagvalues>
  <tagvalue>
    <tag>Data.Barcode</tag>
    <value>True</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.DateStampFirstScale</tag>
    <value>20180111</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.DateStampLastScale</tag>
    <value>20180111</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Dot</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Hangtab</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.Deviation</tag>
    <value>0</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.DeviationHigh</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.DeviationLimitHigh</tag>
    <value>0</value>
  </tagvalue>
</tagvalues>'

SELECT X.N.value('(tag/text())[1]','varchar(50)') AS Tag,
       X.N.value('(value/text())[1]','varchar(50)') AS [Value]
FROM @XML.nodes('/tagvalues/tagvalue') X(N);
DECLARE@XML;
SET@XML=
'
数据。条形码
真的
Data.DateStampFirstScale
20180111
Data.DateStampLastScale
20180111
数据点
假的
数据挂签
假的
Data.Scale\x.Scale\u 0.0偏差
0
Data.Scale_x.Scale_0.Deviation高
假的
Data.Scale_x.Scale_0.DeviationLimition高
0
'
选择X.N.value('(tag/text())[1],'varchar(50')作为标记,
X.N.value('(value/text())[1],'varchar(50)'作为[value]
从@XML.nodes('/tagvalues/tagvalue')X(N);
你是说像这样

DECLARE @XML xml;
SET @XML = 
'<tagvalues>
  <tagvalue>
    <tag>Data.Barcode</tag>
    <value>True</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.DateStampFirstScale</tag>
    <value>20180111</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.DateStampLastScale</tag>
    <value>20180111</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Dot</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Hangtab</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.Deviation</tag>
    <value>0</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.DeviationHigh</tag>
    <value>False</value>
  </tagvalue>
  <tagvalue>
    <tag>Data.Scale_x.Scale_0.DeviationLimitHigh</tag>
    <value>0</value>
  </tagvalue>
</tagvalues>'

SELECT X.N.value('(tag/text())[1]','varchar(50)') AS Tag,
       X.N.value('(value/text())[1]','varchar(50)') AS [Value]
FROM @XML.nodes('/tagvalues/tagvalue') X(N);
DECLARE@XML;
SET@XML=
'
数据。条形码
真的
Data.DateStampFirstScale
20180111
Data.DateStampLastScale
20180111
数据点
假的
数据挂签
假的
Data.Scale\x.Scale\u 0.0偏差
0
Data.Scale_x.Scale_0.Deviation高
假的
Data.Scale_x.Scale_0.DeviationLimition高
0
'
选择X.N.value('(tag/text())[1],'varchar(50')作为标记,
X.N.value('(value/text())[1],'varchar(50)'作为[value]
从@XML.nodes('/tagvalues/tagvalue')X(N);

试试XQuery<代码>节点()


试试XQuery<代码>节点()

可能的副本:可能的副本:
select n.value('tag[1]', 'varchar(max)') [Tag],
       n.value('value[1]', 'varchar(max)') [Value]
from @xml.nodes('tagvalues/tagvalue') as p(n)