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;

(источник)