MS SQL“ FOR XML”编码HTML实体?

问题描述 投票:0回答:1

我正在使用MS SQL Server Management Studio。我继承了一个查询,该查询的部分如下所示:

...
ISNULL(
CASE
    WHEN LOWER(PersonClass.Detail) LIKE '%student%'
    THEN SUBSTRING((
            SELECT DISTINCT
                ' / '+STUDENT_TERM.DEPT_NAME
            FROM Warehouse.STUDENT_TERM STUDENT_TERM
                INNER JOIN Warehouse.TERM TERM
                    ON STUDENT_TERM.TERM_CD = TERM.TERM_CD
                    AND TERM.TERM_START_DT <= @fyEnd
                    AND ISNULL(TERM.TERM_END_DT, GETDATE()) >= @fyStart
            WHERE Persons.DWPersonId = STUDENT_TERM.DWPERSID FOR
            XML PATH('')
    ), 4, 100000)
END, '') AS StudentHome,
...

这是在寻找学生的“家庭部门”。一个学生可能有一个以上的住所,因此上述工作有点像MySQL的group_concat

我的问题是有关查询的意外工件。几个部门在数据仓库中都有一些名称,这些名称中嵌入了“&”符号&,例如:

A & B

尽管查询结果是“ HTML编码”,但将“ A&B”变成“ A&amp; B”。

如果我运行内部查询,则结果与预期的一样,使用简单的&号而不是编码形式。我猜想FOR XML正在编码。

是否有一种方法可以在不对结果进行编码的情况下进行group_concat

sql-server ssms
1个回答
0
投票

您可以从xml中获取值,而不是强制转换为字符串:

© www.soinside.com 2019 - 2024. All rights reserved.