Сообщение 8152, уровень 16, состояние 14, строка 10 Строка или двоичные данные будут обрезаны - PullRequest
0 голосов
/ 10 апреля 2019

Сообщение 8152, уровень 16, состояние 14, строка 10 Строка или двоичные данные будут усечены

insert into Customers (CustomerID, CustomerName, Address, City, PostalCode, Country)
    values
        (3, 'Antonio Moreno Taquería', 'Mataderos 2312', 'México D.F.', 05023,  'Mexico'),
        (4, 'Around the Horn', '120 Hanover Sq.', 'London', 110025, 'UK'),
        (5, 'Berglunds snabbköp', 'Berguvsvägen 8', 'Luleå', 0022,  'Sweden'),
        (6, 'Blauer See Delikatessen', 'Forsterstr. 57', 'Mannheim', 68306, 'Germany'),
        (7, 'Blondel père et fils', '24 place Kléber',  'Strasbourg', 67000, 'France'),
        (8, 'Bólido Comidas preparadas', 'C/ Araquil, 67', 'Madrid', 28023, 'Spain'),
        (9, 'Bon app''', '12, rue des Bouchers',    'Marseille', 13008, 'France'),
        (10, 'Bottom-Dollar Marketse', '23 Tsawassen Blvd.', 'Tsawassen',284, 'Canada')

1 Ответ

0 голосов
/ 10 апреля 2019

Невозможно ответить на этот вопрос без схемы таблицы, то есть оператора CREATE TABLE.Сама ошибка вполне понятна, запрос пытается вставить строковое значение в более короткий столбец.Без определения таблицы невозможно определить, какая она.

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

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

select max(len(CustomerID)) as CustomerID, max(len(CustomerName)) as CustomerName, 
        max(len(Address)) as Address, max(len(City)) as City, max(len(PostalCode)) as PostalCode, 
        max(len(Country)) as Country
from (values 
        (3, 'Antonio Moreno Taquería', 'Mataderos 2312', 'México D.F.', 05023,  'Mexico'),
        (4, 'Around the Horn', '120 Hanover Sq.', 'London', 110025, 'UK'),
        (5, 'Berglunds snabbköp', 'Berguvsvägen 8', 'Luleå', 0022,  'Sweden'),
        (6, 'Blauer See Delikatessen', 'Forsterstr. 57', 'Mannheim', 68306, 'Germany'),
        (7, 'Blondel père et fils', '24 place Kléber',  'Strasbourg', 67000, 'France'),
        (8, 'Bólido Comidas preparadas', 'C/ Araquil, 67', 'Madrid', 28023, 'Spain'),
        (9, 'Bon app''', '12, rue des Bouchers',    'Marseille', 13008, 'France'),
        (10, 'Bottom-Dollar Marketse', '23 Tsawassen Blvd.', 'Tsawassen',284, 'Canada')) 
    x(CustomerID, CustomerName, Address, City, PostalCode, Country)

. Возвращает:

CustomerID  CustomerName    Address City    PostalCode  Country
2           25              20      11      6           7

Вам придется сравнить эти размеры с определениями столбцов, чтобы выяснить, какой из них слишком короткий.

В самом запросе есть и другие проблемы.

  • Содержит неанглийские буквы, такие как é, ä и å в строках ASCII.
  • Он рассматривает почтовые индексы как числа, когда они могут быть такими, какими их хочет видеть страна.Мой почтовый индекс Манчестера был M60 7LH.Дэмиен в комментариях опубликовал PO14 3AU, который, по словам Google, находится в Fareham.Размер отличается даже в одной и той же стране

Столбцы таблицы должны быть nvarchar(...), в запросе должны использоваться строковые литералы, т.е. N'México D.F.' вместо 'México D.F.' и почтовый индекс должен хранитьсяв nvarchar() поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...