2012-06-14 3 views
6

Хорошо Я использую SQL Server 2008 и имею поле таблицы типа VARCHAR(MAX). Проблема в том, что при сохранении информации с использованием Hibernate содержимое поля VARCHAR(MAX) становится усеченным. Я не вижу сообщений об ошибках ни на сервере приложений, ни на сервере базы данных.Исправлено поле SQL Server

Содержимое этого поля является простым текстовым файлом. Размер этого текстового файла - 383 КБ.

Это то, что я сделал до сих пор, чтобы устранить эту проблему:

  1. Изменено поле базы данных из VARCHAR(MAX) в TEXT и та же проблема возникает .

  2. Использовал SQL Server Profiler, и я заметил, что полное содержание текста это время
    получен сервером базы данных, но по какой-то причине профайлер зависает при попытке для просмотра SQL с проблемой усечения. Как я уже сказал, незадолго до того, как он замораживается, я заметил, что содержимое полнотекстового файла (383 КБ) получено, поэтому может быть проблемой базы данных.

Неужели кто-нибудь столкнулся с этой проблемой раньше? Любые идеи, что вызывает это усечение?

ПРИМЕЧАНИЕ: просто хочу упомянуть, что я просто вхожу в SQL Studio и просто копирую содержимое поля TEXT и вставляя его в Textpad. Вот как я заметил, что он усекается.

Заранее спасибо.

+1

предложение, которое не имеет ничего общего с моим ответом: прекратить использование Profiler. Вместо этого используйте трассировку на стороне сервера. –

+0

@AaronBertrand Не могли бы вы объяснить, почему вы советуете Профилиру? – Apostrofix

+1

@Apostrofix Поскольку Profiler может привести ваш сервер на колени. Таким образом, может быть след, а значит, и расширенные события, но гораздо проще с Profiler. Из [этой статьи] (http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events): 'SQL Server Profiler - это инструмент, которого следует избегать на занятых серверах производства, как показано в десятикратном увеличении продолжительности и значительном сокращении пропускной способности для повтора. « –

ответ

17

Ваша проблема заключается в том, что, по вашему мнению, Management Studio представит вам все данные. Это не так. Откройте «Инструменты»> «Параметры»> «Результаты запроса»> «SQL Server». Если вы используете «Результаты для сетки», измените «Максимальные символы, полученные» для «Non XML data» (просто обратите внимание, что «Результаты для сетки» исключат любой CR/LF). Если вы используете «Результаты для текста», измените «Максимальное количество символов, отображаемых в каждом столбце».

enter image description here

Вы можете захотеть, чтобы ввести больше, но максимум, который вы можете вернуться в Management Studio является:

65535 for Results to Grid 
8192 for Results to Text 

Если вы действительно хотите, чтобы увидеть все данные в Management Studio, вы можете попробуйте преобразовать его в XML, но это также имеет проблемы. Первый набор результаты с данными Grid> XML до 5 МБ или неограниченных, то сделать:

SELECT CONVERT(XML, column) FROM dbo.table WHERE... 

Теперь это даст результат сетки, где ссылка на самом деле интерактивная. Это откроет новое окно редактора (это не будет окно запроса, поэтому у вас не будет кнопок запуска, IntelliSense и т. Д.) С вашими данными, преобразованными в XML. Это означает, что он заменит > на > и т. Д.Вот простой пример:

SELECT CONVERT(XML, 'bob > sally'); 

Результат:

enter image description here

При нажатии на сетке, вы получите это новое окно:

enter image description here

(Он делает вид имеют IntelliSense, проверяя формат XML, поэтому вы видите squigglies.)

НАЗАД НА RANCH

Если вы просто хотите проверить вменяемость и на самом деле не хотите, чтобы скопировать все 383K в другом месте, то нет! Просто проверьте с помощью:

SELECT DATALENGTH(column) FROM dbo.table WHERE... 

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

(я так написал a tip about this here.)

+0

Да, вы правы. У меня были результаты по умолчанию для Grid. Да, я понял это после того, как мне пришлось написать фиктивную программу для чтения из базы данных и записать это поле в файл. Большое вам спасибо, впервые я столкнулся с этой проблемой. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')' fail with 'XML parsing: строка 1, символ 6, незаконный символ имени. Вы можете использовать 'SELECT 'bob & sally' FOR XML PATH ('')', но это дает 'bob & sally'. Я предпочитаю 'SELECT 'bob & sally' AS [processing-instruction (x)] FOR XML PATH ('')', чтобы избежать зачатия. –

+0

@Martin хорошая точка, когда я использую XML таким образом, это, как правило, ярлык для перемещения гораздо более основных строк в верхнюю панель. –

1

попробуйте использовать SELECT * FROM dbo.table for XML PATH

Смежные вопросы