sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan rettes "Konvertering mislykkedes ved konvertering af værdien til datatype" i SQL Server

SQL Server-fejlmeddelelse 245, niveau 16 fortæller os, at der var et problem under forsøg på at konvertere en værdi til en bestemt datatype.

Du får denne fejl, hvis du forsøger at indsætte den forkerte datatype i en kolonne.

For at løse dette problem skal du sørge for, at datatypen for den værdi, du forsøger at indsætte, stemmer overens med kolonnens type.

Eksempel på problemkode

Her er et eksempel på kode, der resulterer i denne fejl.

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 dette tilfælde forsøgte jeg at indsætte en dato i OrdersId kolonne. Vi kan ved fejlmeddelelsen antage, at denne kolonne er en int kolonne, men det bør vi bekræfte.

Hvis vi ser på tabeldefinitionen, kan vi se OrderId kolonnens type:

CREATE TABLE Orders (
    OrderId int NOT NULL,
    OrderDate date NOT NULL,
    OrderDesc varchar(255) NOT NULL,
    CONSTRAINT PKOrders PRIMARY KEY CLUSTERED(OrderId, OrderDate)
    );

Som forventet, OrderId kolonne er en int kolonne.

Løsning

For at løse dette problem skal vi sikre os, at vi indsætter den korrekte værdi. Vi skal også sikre, at tabeldefinitionen er passende for de data, den skal lagre. Dette vil hjælpe med at håndhæve dataintegriteten i vores database.

I vores tilfælde er kolonnens datatype korrekt. Problemet var forårsaget af, at du ved et uheld forsøgte at indsætte de forkerte data.

Derfor kan vi ændre vores INSERT for at løse problemet sætning for at indsætte de korrekte data.

INSERT INTO Orders(OrderId, OrderDate, OrderDesc) 
VALUES (1, '2020-04-02', 'Dog food');

Resultat:

(1 row affected)

Succes!


  1. PostgreSQL VALUES Kommando forklaret

  2. Få den rigtige del af en streng i SQL Server (T-SQL)

  3. Konverter Unixtime til Datetime SQL (Oracle)

  4. Bevar tidszone i PostgreSQL timestamptz type