【问题标题】:Concatenating xml values when selecting by XQuery in T-SQL在 T-SQL 中通过 XQuery 选择时连接 xml 值
【发布时间】:2013-09-06 08:36:43
【问题描述】:

这是我的示例 XML:

<root>
    <element>
        <subelement>
            <value code="code1">value1</value>
            <value code="code2">value2</value>
        </subelement>
    </element>
</root>

这是我的测试查询:

DECLARE @tempTable TABLE (
    ValueCode nvarchar(MAX),
    Value nvarchar(MAX)
)

DECLARE @xml XML
select @xml = cast(c1 as xml) from OPENROWSET (BULK 'C:\test.xml', SINGLE_BLOB) as T1(c1)

INSERT INTO @tempTable
SELECT 
    Tbl.Col.value('subelement[1]/@code', 'NVARCHAR(MAX)'),
    Tbl.Col.value('subelement[1]', 'NVARCHAR(MAX)')
FROM @xml.nodes('//element') Tbl(Col)

SELECT * FROM @tempTable

查询在执行时给出一行,其中 ValueCode 列包含 NULL,Value 列包含“value1value2”。我想得到的是用分隔符连接的属性和值。例如,我需要 ValueCode 包含 'code1; code2' 和 Value 包含 'value 1;值2'。我怎样才能做到这一点?

【问题讨论】:

    标签: sql-server xml sql-server-2008 xquery sqlxml


    【解决方案1】:

    如果你想要连接字符串,你可以使用 xuery:

    SELECT 
        Tbl.Col.query('for $i in value return concat($i/text()[1], ";")').value('.', 'nvarchar(max)'),
        Tbl.Col.query('for $i in value return concat($i/@code, ";")').value('.', 'nvarchar(max)')
    FROM @xml.nodes('root/element/subelement') Tbl(Col);
    

    如果您希望将值放入行中:

    SELECT 
        Tbl.Col.value('.', 'nvarchar(max)'),
        Tbl.Col.value('@code', 'nvarchar(max)')
    FROM @xml.nodes('root/element/subelement/value') Tbl(Col);
    

    sql fiddle demo

    【讨论】:

    • 这个答案是对 XQuery 功能的有用介绍,可从存储的 XML 返回连接的值。花费了一些工作来找到有关此 XQuery FLWOR 语法的更多信息,以完成我返回由另一个属性过滤的连接值的任务。以下是一些有用的链接:FLWOR SyntaxBasic XQuery examples
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2017-09-18
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多