Ошибка SQL: строка или двоичные данные будут усечены

Я делаю интеграцию на платформе сообщества под названием Telligent. Я использую стороннюю надстройку BlogML для импорта сообщений блога из файла XML (в формате BlogML) на мой локальный сайт Telligent. Платформа Telligent поставляется с множеством классов в их SDK, так что я могу программно добавлять контент, например сообщения в блоге. Например

myWeblogService.AddPost(myNewPostObject);

Приложение BlogML, которое я использую, по сути анализирует XML и создает объекты постов в блоге, а затем добавляет их на сайт с помощью кода, подобного приведенной выше строке примера. Примерно после 40 постов импорта я получаю ошибку SQL:

Exception Details: System.Data.SqlClient.SqlException:
String or binary data would be truncated.
The statement has been terminated.

Я считаю, что эта ошибка означает, что я пытаюсь вставить слишком много данных в поле БД, которое имеет ограничение максимального размера. К сожалению, я не могу сказать, для какой области это проблема. Я запустил SQL Server Profiler во время импорта, но не вижу, в какой хранимой процедуре происходит ошибка. Есть ли другой способ использовать профилировщик или другой инструмент, чтобы точно определить, какая хранимая процедура и даже в каком поле вызвана ошибка? Есть ли другие советы, чтобы получить больше информации о том, где конкретно искать?

О, радости сторонних инструментов...

2 ответа

Решение

Вы правы в том, что исключение связано с попыткой вставить слишком много данных в символьное / двоичное поле. Выполнение трассировки должно определенно позволить вам увидеть, какая процедура / оператор генерирует исключение, если вы фиксируете правильные события, то те, которые вы хотите захватить, будут включать:

  1. SQL: BatchStarting
  2. SQL: BatchCompleted
  3. SQL: StmtStarting
  4. SQL: StmtCompleted
  5. RPC: Starting
  6. RPC: Completed
  7. SP: Starting
  8. SP: Completed
  9. SP:StmtStarting
  10. SP: StmtCompleted
  11. исключение

Если вы точно знаете, что это хранимая процедура, содержащая ошибочный код, вы можете покончить с захватом # 1-4. Убедитесь, что вы захватили все связанные столбцы в трассировке (должно быть по умолчанию, если вы запускаете трассировку с помощью инструмента Profiler). Класс Exception будет включать в себя фактическую ошибку в вашей трассировке, что должно позволить вам увидеть непосредственно предшествующий оператор в том же SPID, который вызвал исключение. Вы должны включить начальные события в дополнение к завершенным событиям, так как возникающее исключение не позволит запускать связанные завершенные события в трассировке.

Если вы можете отфильтровать свою трассировку для конкретной базы данных, приложения, имени хоста и т. Д., Что, несомненно, облегчит отладку, если вы находитесь на занятом сервере, однако, если вы находитесь на незанятом сервере, вам может не понадобиться фильтрация.

Предполагая, что вы используете Sql 2005+, трассировка будет включать в себя столбец с именем "EventSequence", который в основном является инкрементным значением, упорядоченным по последовательности, инициируемой событиями. После того, как вы запустите трассировку и захватите вывод, найдите событие "Исключение", которое сработало (если вы используете профилировщик, строка будет красного цвета), то вы сможете просто найти самый последний SP:StmtStarting или SQL: событие StmtStarting для того же SPID, что произошло до исключения.

Вот снимок экрана с профилем, который я сделал и воспроизводящим событие, похожее на ваше:

http://i47.tinypic.com/1zc01mo.jpg

Вы можете видеть строку исключения красным цветом, а выделенная строка - это непосредственно предшествующее событие SP:StmtStarting, которое сработало до исключения для того же SPID. Если вы хотите узнать, к какой хранимой процедуре относится этот оператор, найдите значения в столбцах ObjectName и / или ObjectId.

Сделав несколько глупых ошибок, вы получите эту ошибку.

если вы пытаетесь вставить строку, как.

String reqName="Food Non veg /n";

здесь /n является виновником. Удалите /n из строки, чтобы выйти из этой ошибки.

Я надеюсь, что это поможет кому-то.

Другие вопросы по тегам