1

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

示例 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))

谢谢, 维尔桑卡尔

4

1 回答 1

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

于 2013-10-28T11:14:09.293 回答