Есть ли эффективный способ увидеть причину «Строковые или двоичные данные будут обрезаны»?

13

Это продолжение этого вопроса . Это также связано с запросом этой функции от Microsoft.

Однако прошло много лет, и с тех пор, как об этом сообщалось, на рынок вышло несколько крупных релизов.

Вопрос: SQL Server 2017 предоставляет какой-либо механизм, облегчающий поиск основной причины этой ошибки? Или это так же трудно исследовать, как это было около 9 лет назад, когда о проблеме сообщили?

Алексей
источник
Я трачу как минимум 4 часа в неделю на отладку этой единственной ошибки, а SQL даже нет в моем описании работы.
Тонни

Ответы:

20

Там не было никаких изменений. SQL Server 2017 по-прежнему предлагает такое же расплывчатое сообщение об ошибке и не предоставляет никакого механизма для обнаружения ошибочной строки / столбца.

Этот элемент Connect имел более 1600 голосов, когда Connect был удален:

Последний комментарий от Microsoft был таким:

Последнее обновление - разработчик, работающий над ним, понимает проблемы, связанные с созданием полного исправления. Может быть сложно передать информацию о столбцах, необходимую для генерации полного сообщения об ошибке, вплоть до фактической функции преобразования таким образом, чтобы это не влияло на производительность вставки или обновления. Мы можем реализовать что-то дешевое в краткосрочной перспективе, такое как регистрация типа и длины усеченных данных. Еще слишком рано знать, когда такое исправление достигнет общедоступного выпуска.

Лучшее, что я могу предложить, - это проголосовать за этот элемент (и прокомментировать его, описав ценность для бизнеса, которую это добавит для вас).

Аарон Бертран
источник
+1. Чтобы добавить один из менее неэффективных способов выяснить проблему (если у вас нет журнала приложения), используйте профилировщик и фильтр (по узлу / пользователю / приложению / запросу / и т. Д.). Кроме того, это может быть полезно: nimblegecko.com/...
жан
3

На наши молитвы был дан ответ, как указано в этом сообщении в блоге MDSN :

SQL Server 2019 представляет новое сообщение с дополнительной контекстной информацией.

Ошибка должна быть гораздо более значимой:

Сообщение 2628, уровень 16, состояние 1, строка 14 Строка или двоичные данные будут обрезаны в таблице «DbName.SchemaName.TableName», столбец «Col». Усеченное значение: '...'.

Кроме того, хорошая новость заключается в том, что это изменение будет перенесено в 2017 и 2016 годах:

Это новое сообщение также переносится в SQL Server 2017 CU12 (и в предстоящем SQL Server 2016 SP2 CU), но не по умолчанию. Необходимо включить флаг трассировки 460, чтобы заменить идентификатор сообщения 8152 на 2628 либо на уровне сеанса, либо на уровне сервера.

Алексей
источник