Sql server 2008 从XML列获取值

Sql server 2008 从XML列获取值,sql-server-2008,Sql Server 2008,我有一个具有此值的XML列 <sso_links> <linktype>mytype</linktype> <url>http://mydomain.com</url> <linktype>mytype2</linktype> <url>http://somedomain.com</url> </sso_links> 这从XML中生成了2行。如何输出所

我有一个具有此值的XML列

<sso_links>
   <linktype>mytype</linktype>
   <url>http://mydomain.com</url>
   <linktype>mytype2</linktype>
   <url>http://somedomain.com</url>
</sso_links>
这从XML中生成了2行。如何输出所有值

创建表

CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)
插入值

INSERT INTO docs VALUES (1, '<sso_links>
<linktype>mytype</linktype>
<url>http://mydomain.com</url>
<linktype>mytype2</linktype>
<url>http://somedomain.com</url>
</sso_links>')
试试看

如果您想要一个“通用”版本来解析
下的所有子节点,并生成它们的名称和值,请使用如下内容:

SELECT 
    NodeName = node.value('local-name(.)', 'varchar(100)'),
    NodeValue = node.value('(.)[1]', 'varchar(200)')
FROM
    dbo.YourTable
CROSS APPLY 
    XmlColumn.nodes('/sso_links/*') AS links(node)
WHERE 
    SomeID = 1
对于您的示例XML,我得到以下输出:

NodeName    NodeValue
linktype    mytype
url         http://mydomain.com
linktype    mytype2
url         http://somedomain.com
由于它不使用特定的节点名称或索引,因此这将适用于

下的任意数量的子节点。这将起作用-但仅当您正好有两个
和两个
子节点时。。。。
SELECT 
    NodeName = node.value('local-name(.)', 'varchar(100)'),
    NodeValue = node.value('(.)[1]', 'varchar(200)')
FROM
    dbo.YourTable
CROSS APPLY 
    XmlColumn.nodes('/sso_links/*') AS links(node)
WHERE 
    SomeID = 1
NodeName    NodeValue
linktype    mytype
url         http://mydomain.com
linktype    mytype2
url         http://somedomain.com