Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So beheben Sie „Konvertierung fehlgeschlagen beim Konvertieren des Werts in den Datentyp“ in SQL Server

SQL Server-Fehlermeldung 245, Ebene 16 teilt uns mit, dass beim Versuch, einen Wert in einen bestimmten Datentyp zu konvertieren, ein Problem aufgetreten ist.

Sie erhalten diesen Fehler, wenn Sie versuchen, den falschen Datentyp in eine Spalte einzufügen.

Stellen Sie zur Behebung dieses Problems sicher, dass der Datentyp des Werts, den Sie einfügen möchten, mit dem Typ der Spalte übereinstimmt.

Beispiel für Problemcode

Hier ist ein Codebeispiel, das zu diesem Fehler führt.

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

Ergebnis:

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

In diesem Fall habe ich versucht, ein Datum in die OrdersId einzufügen Säule. Anhand der Fehlermeldung können wir davon ausgehen, dass diese Spalte ein int ist Spalte, aber wir sollten das überprüfen.

Wenn wir uns die Tabellendefinition ansehen, sehen wir die OrderId Spaltentyp:

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

Wie erwartet, die OrderId Spalte ist ein int Spalte.

Lösung

Um dieses Problem zu beheben, müssen wir sicherstellen, dass wir den richtigen Wert einfügen. Wir müssen auch sicherstellen, dass die Tabellendefinition für die zu speichernden Daten geeignet ist. Dies wird dazu beitragen, die Datenintegrität unserer Datenbank durchzusetzen.

In unserem Fall ist der Datentyp der Spalte korrekt. Das Problem wurde dadurch verursacht, dass versehentlich versucht wurde, die falschen Daten einzufügen.

Um das Problem zu beheben, können wir daher unseren INSERT ändern Anweisung zum Einfügen der korrekten Daten.

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

Ergebnis:

(1 row affected)

Erfolg!