如何从xml值中获取值而不在select语句中提及其属性的名称

时间:2013-10-28 11:10:36

标签: sql sql-server xml sql-server-2008-r2

以下工作正常。但是我想在没有属性或库存名称的情况下动态地阅读它

示例xml

declare @xmlval xml='<ArrayOfCustomers>
   <Customer>
       <ItemId>1</ItemId>
       <Value>Mr Smith</Value>
   </Customer>
   <Customer>
      <ItemId>2</ItemId>
      <Value>Mr Bloggs</Value>
   </Customer>
</ArrayOfCustomers>'

示例查询

SELECT
   Cust.value('(ItemId)[1]', 'int') AS 'ItemID',
   Cust.value('(Value)[1]', 'Varchar(50)') AS 'Customer Name'
FROM
   @xmlval.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust)

以上工作正常。如何从xml值中获取值而不在select语句中提及其属性名称。

- 必需的查询样本格式            例如:

SELECT
   Cust.value('[0][1]', 'int') AS 'ItemID',
   Cust.value('[1][1]', 'Varchar(50)') AS 'Customer Name'

SELECT
   Cust.value('[1]', 'int') AS 'ItemID',
   Cust.value('[1]', 'Varchar(50)') AS 'Customer Name'
FROM
   @xmlval.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust)

在我们的例子中,我不知道输入@xmlval值的列或属性名称。我想将xml值插入新表(int,varchar(50))

谢谢, Velsankar

1 个答案:

答案 0 :(得分:0)

您可以按*选择所有元素,然后先按[1]获取,然后按[2]获取:

select
   Cust.value('*[1]', 'int') AS 'ItemID',
   Cust.value('*[2]', 'Varchar(50)') AS 'Customer Name'
from @xmlval.nodes('/ArrayOfCustomers/Customer') as AOC(Cust) 

<强> sql fiddle demo

相关问题