Msg 8152,字符串或二进制数据将被截断

Ste*_*ans 14 sql-server error-handling

我有这张桌子:

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)      
);
Run Code Online (Sandbox Code Playgroud)

这个插入:

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', 
  'jhinks@hyperionbooks.com', 'Popular fiction')
Run Code Online (Sandbox Code Playgroud)

为什么这句话会产生8152错误?

Aar*_*and 30

VendorContactEmail只有20个字节.第一行(jhinks@hyperionbooks.com)上的电子邮件地址长于24字节.许多电子邮件地址会更长.谁决定只在电子邮件地址栏中允许20个字符?根据标准,这应该是VARCHAR(320)- 64个字符用于localpart + 1用于@ + 255用于域.


Jon*_*Jon 8

无论如何强制操作导致截断执行

SET ANSI_WARNINGS  OFF;
-- Your operation TSQL here.
SET ANSI_WARNINGS ON;
Run Code Online (Sandbox Code Playgroud)

(资源)