Msg 8152, String или двоичные данные будут усечены
У меня есть эта таблица:
CREATE TABLE Vendors
(
VendorID NUMERIC(10) NOT NULL,
VendorName CHAR(50) NOT NULL,
VendorAddress VARCHAR(30) NULL,
VendorCityName VARCHAR(20) NOT NULL,
VendorStateName CHAR(2) NOT NULL,
VendorZip VARCHAR(10) NULL,
VendorContactName CHAR(50) NOT NULL,
VendorContactPhone VARCHAR(12) NOT NULL,
VendorContactEmail VARCHAR(20) NOT NULL,
VendorSpecialty CHAR(20) NOT NULL
CONSTRAINT VendorsPK PRIMARY KEY (VendorID)
);
И эта вставка:
INSERT INTO Vendors(VendorID, VendorName, VendorAddress,
VendorCityName, VendorStateName, VendorZip, VendorContactName,
VendorContactPhone, VendorContactEmail, VendorSpecialty)
VALUES(151330, 'Hyperion', '77 West 66th Street', 'New York',
'NY', 10023, 'John Hinks', '212-337-6564',
'[email protected]', 'Popular fiction')
Почему этот оператор дает ошибку 8152?
Ответы
Ответ 1
VendorContactEmail
составляет всего 20 байтов. Ваш адрес электронной почты в первой строке ([email protected]
) длиннее этого - 24 байта. И многие адреса электронной почты будут длиннее. Кто решил разрешить использование только 20 символов в столбце адреса электронной почты? Согласно стандарту, это должно быть VARCHAR(320)
- 64 символа для <localpart>
+ 1 для @
+ 255 для <domain>
.
Что касается самого сообщения об ошибке, то найти виновника сегодня легче, чем тогда.
Ответ 2
Принудительная операция: результаты в усечении в любом случае
SET ANSI_WARNINGS OFF;
-- Your operation TSQL here.
SET ANSI_WARNINGS ON;
(источник)