在SQL Server中选择XML节点

时间:2011-05-10 06:21:28

标签: sql-server xml

您好我需要通过从子节点

中选择值来填充表格

XML看起来像这样

<Transmitters>
  <Id>1</Id><CoverageLevel>2</CoverageLevel>
  <Id>2</Id><CoverageLevel>4</CoverageLevel>
  <Id>3</Id><CoverageLevel>6</CoverageLevel>
</Transmitters>

和表有两个字段

Transmitter(Id, CoverageLevel)

INSERT INTO         
Transmitter([idTransmitter], [coverageLevel])

   SELECT       
      ParamValues.T.value('Id[1]', 'nvarchar(50)'),  
      ParamValues.T.value('CoverageLevel[1]', 'nvarchar(50)')
   FROM
      @otherTransmitter.nodes('//Transmitters') AS ParamValues(T) 

但它不起作用?

1 个答案:

答案 0 :(得分:3)

您的XML格式不适合此类任务 - 您可以依赖<Transmitters>内的任何可用子节点。

如果您的XML看起来像这样:

<Transmitters>
  <Transmitter>
    <Id>1</Id><CoverageLevel>2</CoverageLevel>
  </Transmitter>
  <Transmitter>
    <Id>2</Id><CoverageLevel>4</CoverageLevel>
  </Transmitter>
  <Transmitter>
    <Id>3</Id><CoverageLevel>6</CoverageLevel>
  </Transmitter>
</Transmitters>

然后你可以使用XPath表达式

@otherTransmitter.nodes('/Transmitters/Transmitter') AS ParamValues(T) 

抓住你的价值观。

您没有 - 您的<Id>中只有个人<CoverageLevel><Transmitters> - 没有“容器”XML标记将这些元素组合在一起。< / p>

真的没有XPath可以让你正确地枚举那些节点.....