Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 如何从xml值中获取值而不在select语句中提及其属性名称_Sql_Sql Server_Xml_Sql Server 2008 R2 - Fatal编程技术网

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

Sql 如何从xml值中获取值而不在select语句中提及其属性名称,sql,sql-server,xml,sql-server-2008-r2,Sql,Sql Server,Xml,Sql Server 2008 R2,下面的方法很好用。但我想动态地阅读它,而不需要属性或coulmn名称 示例xml declare @xmlval xml='<ArrayOfCustomers> <Customer> <ItemId>1</ItemId> <Value>Mr Smith</Value> </Customer> <Customer> <ItemId>2

下面的方法很好用。但我想动态地阅读它,而不需要属性或coulmn名称

示例xml

declare @xmlval xml='<ArrayOfCustomers>
   <Customer>
       <ItemId>1</ItemId>
       <Value>Mr Smith</Value>
   </Customer>
   <Customer>
      <ItemId>2</ItemId>
      <Value>Mr Bloggs</Value>
   </Customer>
</ArrayOfCustomers>'
以上方法很好。如何从xml值中获取值,而不在select语句中提及其属性名称

-所需的查询示例格式 例如:

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

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

谢谢,
Velsankar

您可以通过*选择所有元素,然后通过[1]获取第一个元素,通过[2]获取第二个元素:


谢谢当列数或字段数未知时,是否可以获取值?使用动态SQL也可以,但您希望获取什么输出?通常,从SQL Server返回动态列数是不好的,因为我将在表列中获得一个xml值。我得把它当作桌子还回去。每一行可能有不同的xml值。因此,在执行时,只有我知道列的数量及其属性名。请告知如何获取表中的值之后,您是否在某些客户端应用程序中处理表?在SQL Server中您将很难做到这一点,使用适当的编程语言更容易做到这一点是的。好啊在客户端就可以了。
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)
select
   Cust.value('*[1]', 'int') AS 'ItemID',
   Cust.value('*[2]', 'Varchar(50)') AS 'Customer Name'
from @xmlval.nodes('/ArrayOfCustomers/Customer') as AOC(Cust)