Я пытаюсь объединить поле комментариев для каждого идентификатора, разделенного ';' из нескольких строк в одну на ID в SQL Server 13. Для этого я использую следующий запрос:
- table1 в имени таблицы; --element_id - идентификатор, необходимый для объединения / агрегирования; --value содержит текст, который должен быть объединен
- Тип данных значения nvarchar (max)
( SELECT casecomment + ';'
FROM (select
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE(
value
,char(0x0000),'') ,char(0x0001),'') ,char(0x0002),'') ,char(0x0003),'') ,char(0x0004),'')
,char(0x0005),'') ,char(0x0006),'') ,char(0x0007),'') ,char(0x0008),'') ,char(0x000B),'')
,char(0x000C),'') ,char(0x000E),'') ,char(0x000F),'') ,char(0x0010),'') ,char(0x0011),'')
,char(0x0012),'') ,char(0x0013),'') ,char(0x0014),'') ,char(0x0015),'') ,char(0x0016),'')
,char(0x0017),'') ,char(0x0018),'') ,char(0x0019),'') ,char(0x001A),'') ,char(0x001B),'')
,char(0x001C),'') ,char(0x001D),'') ,char(0x001E),'') ,char(0x001F),'')
as casecomment, element_id from table1
where element = 'comments'
) y
WHERE x.element_id = y.element_id
ORDER BY element_id
FOR XML PATH('') , TYPE).value('.','varchar(max)') as Comments FROM (select REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE(
value
,char(0x0000),'') ,char(0x0001),'') ,char(0x0002),'') ,char(0x0003),'') ,char(0x0004),'')
,char(0x0005),'') ,char(0x0006),'') ,char(0x0007),'') ,char(0x0008),'') ,char(0x000B),'')
,char(0x000C),'') ,char(0x000E),'') ,char(0x000F),'') ,char(0x0010),'') ,char(0x0011),'')
,char(0x0012),'') ,char(0x0013),'') ,char(0x0014),'') ,char(0x0015),'') ,char(0x0016),'')
,char(0x0017),'') ,char(0x0018),'') ,char(0x0019),'') ,char(0x001A),'') ,char(0x001B),'')
,char(0x001C),'') ,char(0x001D),'') ,char(0x001E),'') ,char(0x001F),'') as casecomments, element_id from table1
where element = 'comments'
) x
GROUP BY element_id```
Даже если я использовал замену для char (0x0000), Я все еще получаю следующую ошибку:
FOR XML не удалось сериализовать данные для узла NoName, поскольку он содержит символ (0x0000), который не разрешен в XML. Чтобы получить эти данные, используя FOR XML, преобразуйте их в двоичные данные, данные типа varbinary или image и используйте директиву BINARY BASE64.
Мои данные содержат много специальных символов (латинские символы, et c) ) но я не могу найти оскорбительный ряд. Обратите внимание, что у меня более 400 тыс. Строк, поэтому выполнить оценку вручную невозможно. Кроме того, у меня есть старая версия SQL Server, поэтому функция перевода не работает.
Любая помощь приветствуется. Спасибо.