Der SQL Server-Fehler 120 tritt auf, wenn Sie in Ihrem INSERT
nicht genügend Spalten angeben Liste bei Verwendung eines SELECT
Liste für die einzufügenden Werte.
Genauer gesagt passiert es, wenn Sie ein SELECT
verwenden Liste in Ihrem INSERT
-Anweisung, aber die SELECT
list gibt nicht so viele Spalten zurück, wie Sie mit INSERT
angeben .
Dies ist leicht zu beheben. Stellen Sie einfach sicher, dass die Anzahl der Spalten zwischen Ihren INSERT
übereinstimmt und SELECT
Liste.
Schlechter Code
Hier ist ein Codebeispiel, das diesen Fehler verursacht.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Ergebnis:
Msg 120, Level 15, State 1, Line 1 The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
In diesem Fall gebe ich in meinem INSERT
drei Spalten an , aber ich wähle nur zwei Spalten in meinem SELECT
aus Liste.
Guter Code
So beheben Sie den obigen Fehler.
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch;
Ergebnis:
(5 rows affected)
Ich habe lediglich OrderDesc
hinzugefügt Spalte zum SELECT
Liste.
Weniger Spalten angeben
Das vorherige Beispiel geht offensichtlich davon aus, dass ich die zusätzliche Spalte einfügen wollte. Wenn wir nicht wollten, dass diese Spalte eingefügt wird, hätten wir sie aus INSERT
entfernen sollen insgesamt.
So.
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
Dies hängt jedoch davon ab, ob wir NOT NULL
haben oder nicht Beschränkungen für die Zieltabelle.
Einen Platzhalter in der SELECT-Liste verwenden
Es ist auch möglich, das Sternchen (*
) Platzhalter im SELECT
Liste.
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch;
Obwohl dies nicht als bewährte Vorgehensweise angesehen wird, da Sie versehentlich die falschen Spalten auswählen oder sie in der falschen Reihenfolge sein könnten usw.