J'ai ce tableau:
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)
);
Et cet insert:
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')
Pourquoi cette instruction génère-t-elle l'erreur 8152?
VendorContactEmail
ne fait que 20 octets. Votre adresse e-mail sur la première ligne ([email protected]
) Est plus longue que cela - 24 octets. Et de nombreuses adresses e-mail seront plus longues. Qui a décidé de n'autoriser que 20 caractères dans la colonne de l'adresse e-mail? Selon la norme, cela devrait être VARCHAR(320)
- 64 caractères pour <localpart>
+ 1 pour @
+ 255 pour <domain>
.
Quant au message d'erreur lui-même, trouver le coupable est plus facile aujourd'hui qu'il ne l'était à l'époque.
Force l'opération qui se traduit par une troncature à exécuter de toute façon
SET ANSI_WARNINGS OFF;
-- Your operation TSQL here.
SET ANSI_WARNINGS ON;