web-dev-qa-db-ja.com

メッセージ8152、文字列またはバイナリデータが切り捨てられます

私はこの表を持っています:

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エラーが発生するのはなぜですか?

14
Stephen Fians

VendorContactEmailは20バイトのみです。最初の行の電子メールアドレス(_[email protected]_)はそれよりも長い-24バイトです。また、多くの電子メールアドレスが長くなります。電子メールアドレスの列に20文字のみを許可することにしたのは誰ですか?標準によれば、これはVARCHAR(320)-_<localpart>_の場合は64文字、_@_の場合は1文字、_<domain>_の場合は255文字にする必要があります。

エラーメッセージ自体については、犯人を見つけるのは、当時よりも簡単です。

30
Aaron Bertrand

切り捨てが発生する操作を強制的に実行する

SET ANSI_WARNINGS  OFF;
-- Your operation TSQL here.
SET ANSI_WARNINGS ON;

(ソース)

8
Jon