Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment réparer "La conversion a échoué lors de la conversion de la valeur en type de données" dans SQL Server

L'erreur SQL Server Msg 245, niveau 16 nous indique qu'il y a eu un problème lors de la tentative de conversion d'une valeur en un type de données spécifique.

Vous obtiendrez cette erreur si vous essayez d'insérer le mauvais type de données dans une colonne.

Pour résoudre ce problème, assurez-vous que le type de données de la valeur que vous essayez d'insérer correspond au type de la colonne.

Exemple de code de problème

Voici un exemple de code qui génère cette erreur.

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

Résultat :

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

Dans ce cas, j'ai essayé d'insérer une date dans le OrdersId colonne. Nous pouvons supposer par le message d'erreur que cette colonne est un int colonne, mais nous devons vérifier cela.

Si nous regardons la définition de la table, nous pouvons voir le OrderId type de colonne :

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

Comme prévu, le OrderId la colonne est un int colonne.

Solution

Pour résoudre ce problème, nous devons nous assurer que nous insérons la valeur correcte. Nous devons également nous assurer que la définition de la table est appropriée pour les données qu'elle doit stocker. Cela aidera à renforcer l'intégrité des données de notre base de données.

Dans notre cas, le type de données de la colonne est correct. Le problème a été causé par une tentative accidentelle d'insertion de données erronées.

Par conséquent, pour résoudre le problème, nous pouvons modifier notre INSERT déclaration pour insérer les données correctes.

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

Résultat :

(1 row affected)

Succès !