Ні, він ніде не реєструється. Проголосуйте та заявіть про свою справу; це один із довгого списку речей, які слід виправити в SQL Server.
Це було запитано років тому на Connect (можливо, спочатку в часовій рамці SQL Server 2000 або 2005), а потім знову в новій системі зворотного зв'язку:
А тепер він був доставлений у SQL Server 2019 , SQL Server 2017 CU12 та з’явиться у майбутньому МС SQL Server 2016 SP2.
У першому загальнодоступному CTP SQL Server 2019 він відображається лише під прапором 460. Це звучить як секрет, але він був опублікований у цій газеті Microsoft . Це буде поведінка за замовчуванням (прапор сліду не потрібно) буде рухатися вперед, хоча ви зможете контролювати це за допомогою нової конфігурації бази даних VERBOSE_TRUNCATION_WARNINGS
.
Ось приклад:
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
Результат у всіх підтримуваних версіях до SQL Server 2019:
Msg 8152, рівень 16, стан 30, рядок 5
Рядок або двійкові дані будуть усічені.
Заява скасована.
Тепер на CTP SQL Server 2019 з увімкненим прапором сліду:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
Результат показує таблицю, стовпець та значення ( усічений , не повний ):
Msg 2628, рівень 16, стан 1, рядок 11
Рядок або двійкові дані будуть врізані в таблицю 'tempdb.dbo.x', стовпчик 'a'. Усечене значення: 'f'.
Заява скасована.
Поки ви не зможете кинути все та оновити до SQL Server 2019 або перейти на базу даних Azure SQL, ви можете змінити свій "автоматичний" код, щоб фактично витягнути max_length sys.columns
, а також ім'я, яке ви все одно маєте отримати, а потім застосувати LEFT(column, max_length)
або будь-який еквівалент PG Або, оскільки це означає, що ви мовчки втрачаєте дані, перевірте, які стовпці невідповідні, і виправте стовпці призначення, щоб вони вмістили всі дані з джерела. З огляду на доступ до метаданих до обох систем, а також на те, що ви вже пишете запит, який автоматично повинен відповідати стовпцям джерела -> пункту призначення (інакше ця помилка навряд чи буде вашою найбільшою проблемою), вам не доведеться робити жодної грубої сили здогадки взагалі.
sys.columns
тому що я абсолютно не мав уявлення, який код ви зараз використовуєте для "автоматичного" генерування ваших запитів. Дійсно, не так вже й складно, я б міг здогадатися про включення у свій код, ніжSELECT name, object_id, max_length FROM sys.columns;
. Оскільки у вас вже є автоматичний код, який повинен робити це - або щось дуже подобається - я не вважав, що приклад необхідний.