sql >> Databasteknik >  >> RDS >> Sqlserver

Så här fixar du "Konverteringen misslyckades när värdet konverterades till datatyp" i SQL Server

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!


  1. Hur man skapar en databasmodell från grunden

  2. SQL skiftlägeskänslig strängjämförelse

  3. Beräkna ålder från födelsedag med oracle plsql trigger och infoga åldern i tabellen

  4. Hur man tar bort virtuell maskin från VirtualBox