Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Unicode символы T-SQL-->XML  [new]
PavM
Member

Откуда:
Сообщений: 122
Всем доброго времени суток,
имеется примерно следующего вида запрос:

SELECT 
....
p_de.Description AS "@description",
....
FROM CacheFile_PropositionDataElement p_de
FOR XML PATH ('DataElement'), TYPE)

Получаю вот такую ошибку:
Msg 6841, Level 16, State 1, Procedure SP_CacheFile_GetDataElements, Line 238
FOR XML could not serialize the data for node '@description' because it contains a character (0x0007) which is not allowed in XML. To retrieve this data using FOR XML, convert it to binary, varbinary or image data type and use the BINARY BASE64 directive.

Конечно можно простым REPLACE решить вопрос, но таких запрещенных символов не так мало, хотелось бы сделать универсальное решение. Прошу помочь.

Заранее спасибо.
18 июл 11, 15:11    [10989858]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
PavM, ну дык вам же англицким по белому написано... Проблема в чем? В переводе?

DECLARE @tbl TABLE (f NVARCHAR(10))

INSERT INTO @tbl(f)
SELECT CHAR(7) UNION ALL
SELECT N'<>' UNION ALL
SELECT N'проверка' UNION ALL
SELECT N'"&'

SELECT    t.f
          FROM      @tbl t
        FOR
          XML PATH('DataElement'), BINARY BASE64
18 июл 11, 15:38    [10990024]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
PavM
Member

Откуда:
Сообщений: 122
kDnZP,

благодарю

при попытке сделать еще 1 уровень вложения, к примеру:
DECLARE @tbl TABLE (f NVARCHAR(10))

INSERT INTO @tbl(f)
SELECT CHAR(7) UNION ALL
SELECT N'<>' UNION ALL
SELECT N'проверка' UNION ALL
SELECT N'"&'

SELECT (
SELECT    t.f
          FROM      @tbl t
        FOR
          XML PATH('DataElement'), BINARY BASE64)
FOR
          XML PATH('DataElements'), BINARY BASE64

Все тэги заменяются на <, > и т.д.

Можно этого как-то избежать?
18 июл 11, 16:40    [10990463]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
PavM
Member

Откуда:
Сообщений: 122
PavM
Все тэги заменяются на <, > и т.д.



похоже автозамена сработала
в итоге вместо < и > в файле отображаются & lt ; и др.
18 июл 11, 17:10    [10990745]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
XML PATH('DataElement'), BINARY BASE64, type
18 июл 11, 17:35    [10990952]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
PavM
Member

Откуда:
Сообщений: 122
daw,

DECLARE @tbl TABLE (f NVARCHAR(10))

INSERT INTO @tbl(f)
SELECT CHAR(7) UNION ALL
SELECT N'<>' UNION ALL
SELECT N'проверка' UNION ALL
SELECT N'"&'

SELECT (
SELECT    t.f
          FROM      @tbl t
        FOR
          XML PATH('DataElement'), BINARY BASE64, TYPE)
FOR
          XML PATH('DataElements'), BINARY BASE64

Такое решение я попробовал в первую очередь - оно не работает.

Похоже нельзя привести к нормальному виду, если есть запрещенный символ в любом виде.
18 июл 11, 17:40    [10990981]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> Такое решение я попробовал в первую очередь - оно не работает.

оно работает. теги, полученные в результате выполнения for xml в подзапросе останутся тегами.
а символы типа <> & в текстовом столбце, разумеется, заменятся на ескейп-последовательности.
а как вы хотели, интересно?
18 июл 11, 21:26    [10991868]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> разумеется, заменятся на ескейп-последовательности.

да, пардоно, в вашем случае оно все закодировано в base64 будет.
18 июл 11, 21:31    [10991891]     Ответить | Цитировать Сообщить модератору
 Re: Unicode символы T-SQL-->XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
только это... binary base64 мало, надо еще столбец к binary приводить.
да, оно все закодированным тогда будет. но по-другому и не получится, по-моему.
explicit-ом, разве что, все собирать - но не факт, что результат потом вообще обработать можно будет.
18 июл 11, 22:11    [10992083]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить