SQL Server-felmeddelande 245, nivå 16 berättar att det uppstod ett problem när man försökte konvertera ett värde till en specifik datatyp.
Du får det här felet om du försöker infoga fel datatyp i en kolumn.
För att åtgärda det här problemet, se till att datatypen för värdet du försöker infoga matchar kolumntypen.
Exempel på problemkod
Här är ett exempel på kod som resulterar i det här felet.
INSERT INTO Orders(OrderId, OrderDate, OrderDesc)
VALUES ('2020-04-02', '2020-04-02', 'Dog food');
Resultat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value '2020-04-02' to data type int.
I det här fallet försökte jag infoga ett datum i OrdersId
kolumn. Vi kan anta av felmeddelandet att den här kolumnen är en int kolumn, men vi bör verifiera det.
Om vi tittar på tabelldefinitionen kan vi se OrderId
kolumns typ:
CREATE TABLE Orders (
OrderId int NOT NULL,
OrderDate date NOT NULL,
OrderDesc varchar(255) NOT NULL,
CONSTRAINT PKOrders PRIMARY KEY CLUSTERED(OrderId, OrderDate)
);
Som förväntat, OrderId
kolumnen är en int kolumn.
Lösning
För att lösa det här problemet måste vi se till att vi anger rätt värde. Vi måste också se till att tabelldefinitionen är lämplig för de data som den behöver lagra. Detta kommer att hjälpa till att upprätthålla dataintegriteten i vår databas.
I vårt fall är kolumnens datatyp korrekt. Problemet orsakades av att man av misstag försökte infoga fel data.
För att åtgärda problemet kan vi därför ändra vår INSERT
för att infoga rätt data.
INSERT INTO Orders(OrderId, OrderDate, OrderDesc)
VALUES (1, '2020-04-02', 'Dog food');
Resultat:
(1 row affected)
Framgång!