У меня смехотворно длинная строка xml, в ней> 800000 символов. «Клиент» также является «сервером». Операционная система - windows 2k8 x64. База данных имеет много памяти, как и клиент.
Проблема в том, что как только я набираю какое-то магическое количество символов - ровно 43679 xml-символов - строка возвращает то, что ПОЯВЛЯЕТСЯ быть ''. Я называю их xml-символами, потому что любой пробел, очевидно, удаляется сервером sql, когда он вычисляет длину - что я делаю с этим sql: len (convert (varchar (max), xsl)) Почему число 43679 также сбивает меня с толку ...
У кого-нибудь есть эта проблема? Я фактически подключился к тому же серверу с Windows 2k3 и другим сервером Windows 2k8, и никаких проблем на любом другом компьютере, кроме этого (сам фактический сервер), нет.
Я также нашел результаты запроса -> sql server -> результаты в сетку и установил предел для xml на 'неограниченный', но, похоже, он все еще не 'работает' ... (те, которые работают, имеют это значение 2 МБ fyi)
Спасибо за любые комментарии - я попробую все ... это ничего не мешает работать - я уверен, что это всего лишь один клиент, но он сводит меня с ума! :)
ОБНОВЛЕНИЕ: к вашему сведению - проблема не в преобразовании - я действительно не хочу его преобразовывать. единственная причина, по которой я использую convert в этом примере, - это использовать len (len не работает с типами данных xml), поэтому я могу узнать, насколько «длинным» является xml.
Проблема в том ...
INSERT INTO someTableForXml(theXml)
VALUES ('<this><is><some><really>long xml</really></some></is></this>')
Теперь скопируйте и вставьте это, пока у вас не будет около 100000 строк xml, и вставьте его ... Когда я выбираю строки обратно, используя:
SELECT * FROM someTableForXml
Я возвращаюсь на 1 строку, и в «сетке» я получаю симпатичную небольшую гиперссылку для xml, которая, когда я щелкаю по ней, показывает мне «полный xml» в новой вкладке. Однако для МЕНЯ ... Как только я передаю это странно магическое число, оно перестает это делать и просто выглядит пустым.





Я думаю, у вас есть 2 отдельные проблемы:
Поведение SSMS
Попробуйте выполнить дамп с помощью bcp в файл и посмотрите, что у вас получится. Таким образом вы обойдете SSMS и это странно.
Или ПРЕОБРАЗОВАТЬ в varchar (max), чтобы SSMS рассматривал его как данные LOB (но см. Следующую информацию)
преобразование xml 43679, вероятно, вызвано преобразованием в varchar (max). См. ЛИТЬЕ И ПРЕОБРАЗОВАНИЕ и параметр стиля CONVERT для XML. Стиль по умолчанию «отбрасывает незначительные пробелы», и у вас нет стиля выше.
Я думаю, что SSMS применяет максимальную длину не-LOB-данных (65535) на основе столбца с правильным CONVERT, но отображает его без пробелов. Отсюда и несоответствие.
Я думаю, это потому, что у вас нет <?xml version = "1.0" encoding = "UTF-16"?> в начале вашего XML.
я ценю ваше время. Благодарю. к сожалению, я не думаю, что это актуально, поэтому я обновил исходный вопрос более подробно.