SQL Server XML解析与连接

SQL Server XML解析与连接,sql,sql-server,xml,Sql,Sql Server,Xml,我在XML类型的“test”列中有一组XML,如下所示。这张桌子是“奶牛” 查询 在里面 1. 2. 3. 4. 我想写一个select语句,返回1行1列,值为“apple、pear、kiwi、carrot”。这可能吗?如果没有其他标准,您只需将这些值作为一件事检索,您可以这样做: SELECT STUFF((SELECT ', ' + A.B.value('@name', 'NVARCHAR(255)') FROM cow CROSS APPLY test.nodes('p/v/w/

我在XML类型的“test”列中有一组XML,如下所示。这张桌子是“奶牛”


查询

在里面
1.
2.
3.
4.


我想写一个select语句,返回1行1列,值为“apple、pear、kiwi、carrot”。这可能吗?

如果没有其他标准,您只需将这些值作为一件事检索,您可以这样做:

SELECT STUFF((SELECT ', ' + A.B.value('@name', 'NVARCHAR(255)')
FROM cow
CROSS APPLY test.nodes('p/v/w/p/v') A(B)
FOR XML PATH('')), 1, 2, '')
具有讽刺意味的是,XML路径的
与它是一个XML列这一事实无关。

考虑使用XQuery的函数,该函数获取一系列项并将其原子化:

CREATE TABLE #cow(cow XML);

INSERT INTO #cow
SELECT (N'<p>
            <k>query</k>
            <v>
            <w id="a" name="b">
                <p>
                <op>IN</op>
                <v name="apple">1</v>
                <v name="pear">2</v>
                <v name="kiwi">3</v>
                <v name="carrot">4</v>
                </p>
            </w>
            </v>
        </p>');      

select cow.query('data(/p/v/w/p/v/@name)') as example from #cow

#   example
#1  apple pear kiwi carrot

我喜欢这样,+1在我这边,但是要注意,如果连接的字符串包含空格,逗号替换将不起作用。。。
CREATE TABLE #cow(cow XML);

INSERT INTO #cow
SELECT (N'<p>
            <k>query</k>
            <v>
            <w id="a" name="b">
                <p>
                <op>IN</op>
                <v name="apple">1</v>
                <v name="pear">2</v>
                <v name="kiwi">3</v>
                <v name="carrot">4</v>
                </p>
            </w>
            </v>
        </p>');      

select cow.query('data(/p/v/w/p/v/@name)') as example from #cow

#   example
#1  apple pear kiwi carrot
select REPLACE(CONVERT(nvarchar(255), cow.query('data(/p/v/w/p/v/@name)')),
               ' ', ', ') as example from #cow

#   example
#1  apple, pear, kiwi, carrot