Невозможно ответить на этот вопрос без схемы таблицы, то есть оператора 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()
поле