Чи є ефективний спосіб побачити причину для "Рядок або двійкові дані будуть усічені"?


13

Це продовження цього питання . Це також пов’язано з цим запитом на функції від Microsoft.

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

Запитання: чи надає SQL Server 2017 якийсь механізм, який полегшує з'ясування першопричини цієї помилки? Або так важко дослідити, як це було близько 9 років тому, коли повідомлялося про проблему?


Я витрачаю щонайменше 4 години на тиждень на налагодження цієї єдиної помилки, і SQL навіть не міститься в моєму описі завдання.
Тоні

Відповіді:


20

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

Під час виходу на пенсію за цей елемент Connect було понад 1600 голосів:

Останній коментар від Microsoft:

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

Найкраще, що я можу запропонувати, - проголосувати за цей предмет (і прокоментувати його, описуючи ділову цінність, яку це додасть вам).


+1. Додавання одного з менш неефективних способів з'ясувати винний результат (якщо у вас немає журналу додатків) - це використовувати профілер і фільтр (за допомогою хоста / користувача / програми / запиту / тощо). Також це може бути корисним: nimblegecko.com/…
jean

3

На наші молитви було відповідено, як зазначено в цій публікації в блозі MDSN :

SQL Server 2019 представляє нове повідомлення з додатковою інформацією про контекст.

Помилка має бути набагато більш значущою:

Msg 2628, рівень 16, стан 1, рядок 14 Рядок або двійкові дані будуть врізані в таблицю "DbName.SchemaName.TableName", стовпець "Col". Усечене значення: '...'.

Також гарна новина полягає в тому, що ці зміни будуть перенесені в 2017 і 2016 роках:

Це нове повідомлення також підтримується в SQL Server 2017 CU12 (і в майбутньому SQL Server 2016 SP2 CU), але не за замовчуванням. Потрібно включити прапор трассировки 460, щоб замінити ідентифікатор повідомлення 8152 на 2628 або на рівні сеансу, або на сервері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.