Я использую 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 & B". Msgstr ".
Если я выполню внутренний запрос, результат будет, как и ожидалось, с простым амперсандом, а не в закодированной форме. Я предполагаю, что FOR XML
выполняет кодирование.
Есть ли способ сделать group_concat
без кодирования результата?