Sql server 2008 从XML列获取值
我有一个具有此值的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行。如何输出所
<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