sql >> Databáze >  >> RDS >> Sqlserver

Jak opravit „Konverze se nezdařila při převodu hodnoty na datový typ“ v SQL Server

Chyba serveru SQL Msg 245, úroveň 16 nám říká, že při pokusu o převod hodnoty na konkrétní datový typ došlo k problému.

Tato chyba se zobrazí, pokud se pokusíte do sloupce vložit nesprávný datový typ.

Chcete-li tento problém vyřešit, ujistěte se, že datový typ hodnoty, kterou se pokoušíte vložit, odpovídá typu sloupce.

Příklad kódu problému

Zde je příklad kódu, který vede k této chybě.

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

Výsledek:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '2020-04-02' to data type int.

V tomto případě jsem se pokusil vložit datum do OrdersId sloupec. Podle chybové zprávy můžeme předpokládat, že tento sloupec je int sloupec, ale měli bychom to ověřit.

Pokud se podíváme na definici tabulky, můžeme vidět OrderId typ sloupce:

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

Podle očekávání OrderId sloupec je int sloupec.

Řešení

Abychom tento problém vyřešili, musíme se ujistit, že vkládáme správnou hodnotu. Musíme také zajistit, aby definice tabulky byla vhodná pro data, která potřebuje ukládat. To pomůže zajistit integritu dat naší databáze.

V našem případě je datový typ sloupce správný. Problém byl způsoben náhodným pokusem o vložení nesprávných dat.

Abychom problém vyřešili, můžeme změnit naše INSERT příkaz k vložení správných dat.

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

Výsledek:

(1 row affected)

Úspěch!


  1. INSERT INTO @TABLE EXEC @query s SQL Server 2000

  2. Odemknutí výhod programu certifikovaných partnerů MariaDB

  3. Jak rozbalit soubor v PL/SQL?

  4. Cross Join v Oracle