2011-12-29 39 views
2

我有这个表:TestXml有2列(pk,xCol)。 这是我的表:如何通过T-SQL从xml中选择数据?

create table TestXml (
pk int primary key, xCol xml) 
on [Primary] 
insert into Store.dbo.TestXml(pk,xCol) values (1,'<docs><doc id="12"><section> Section 1</section></doc> 
<doc id="123"><section> Section 1</section> 
<section> Section 2</section> 
</doc> 
</docs>' 
) 

XML值,我是插入看起来是这样的:

<docs> 
    <doc id="12"> 
    <section> Section 1</section> 
    </doc> 
    <doc id="123"> 
    <section> Section 1</section> 
    <section> Section 2</section> 
    </doc> 
</docs> 

我如何可以采取 “<section>” 元素,其中 “<doc id = "123">”?

回答

3

试试这个:

SELECT c.d.value('(.)[1]', 'varchar (100)') AS Section 
FROM Store.dbo.TestXml tx 
    CROSS APPLY tx.xCol.nodes('./docs/doc') AS a(b) 
    CROSS APPLY a.b.nodes('./section') AS c(d) 
WHERE a.b.value('(@id)[1]', 'int') = 123 
+0

谢谢@mwigdahl你的例子。这个推理清除了我如何在SQL Server上读取xml数据类型的问题。 – G21 2012-03-13 15:20:52

+0

@ G21 - 很高兴帮助! – mwigdahl 2012-03-13 19:04:32