69 Stimmen

Spaltenname oder Anzahl der gelieferten Werte stimmt nicht mit der Tabellendefinition überein

In SQL Server versuche ich, Werte aus einer Tabelle in eine andere einzufügen, indem ich die folgende Abfrage verwende:

delete from tblTable1

insert into tblTable1 select * from tblTable1_Link

Ich erhalte den folgenden Fehler:

Spaltenname oder Anzahl der gelieferten Werte stimmt nicht mit der Tabellendefinition überein.

Ich bin sicher, dass beide Tabellen die gleiche Struktur, die gleichen Spaltennamen und die gleichen Datentypen haben.

2 Stimmen

Eine weitere Möglichkeit ist, dass die DB-Kollation Ihrer TEMP-DB und der DB, in die Sie einfügen, nicht übereinstimmen.

4 Stimmen

Ist dies nicht höchst anfechtbar, weil die Schemata der Tabellen nicht veröffentlicht wurden? "Ich bin mir sicher" reicht nicht aus: Wir alle waren schon oft genug in Situationen, in denen wir den Wald vor lauter Bäumen nicht sehen konnten, um zu wissen, dass unsere eigene Gewissheit bedauerlicherweise falsch sein kann, und es braucht eine angemessene Menge an Informationen über das Problem, damit jemand anderes uns auf das Offensichtliche hinweist, das wir übersehen haben.

1 Stimmen

Sie sollten auch einen Blick auf alle Auslöser werfen. Sie erhalten genau die gleiche Meldung, wenn Sie einen schlecht geschriebenen Trigger haben, der in etwas wie eine Prüfungstabelle einfügt.

57voto

gbn Punkte 407102

Sie haben nicht die gleiche Struktur... Ich kann garantieren, dass sie unterschiedlich sind

Ich weiß, dass Sie sie bereits erstellt haben... In der Datenbank gibt es bereits ein Objekt mit dem Namen 'tbltable1'.

Was Sie vielleicht wollen, ist dies (was auch Ihr anderes Problem behebt):

Drop table tblTable1

select * into tblTable1 from tblTable1_Link

31voto

Kris Benedict Punkte 269

Ich möchte auch erwähnen, dass, wenn Sie etwas haben wie

insert into blah
       select * from blah2

und blah und blah2 identisch sind, beachten Sie, dass eine berechnete Spalte denselben Fehler auslöst...

Mir ist gerade klar geworden, dass ich, als die obigen Versuche fehlschlugen und ich versuchte

insert into blah (cola, colb, colc)
       select cola, colb, colc from blah2

In meinem Beispiel war es das Feld fullname (berechnet aus Vor- und Nachname usw.)

0 Stimmen

Hat bei mir funktioniert. Mein Problem war nicht das Einfügen ohne explizite Angabe der Spaltennamen, sondern der Versuch, zwei Tabellen zu verbinden, die nicht als solche erstellt wurden. Nachdem ich die Spaltennamen hinzugefügt hatte, funktionierte der Join. Es muss die berechnete Spalte gewesen sein, die alles durcheinander gebracht hat!

0 Stimmen

Vielen Dank für die berechnete Spalte Problem kann ich bestätigen, dass dies wahr ist. Ich hatte eine Tabelle mit der exakt gleichen Anzahl von Spalten in der gleichen Reihenfolge. Der einzige Unterschied ist, dass die Quelltabelle eine berechnete Spalte verwendet.

0 Stimmen

Ich glaube, ich habe dies gerade mit SELECT INTO und dem Hinzufügen von zwei ROW_NUMBER()-Spalten (unterschiedlich partitioniert) erreicht. Es kommt auch von einer Tabellenwertfunktion :/

23voto

Adriaan Stander Punkte 155899

Für Einfügungen ist es immer besser, die Spaltennamen anzugeben, siehe die folgenden

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'

funktioniert einwandfrei, wenn man die Tabelle def to ändert, tritt der Fehler auf

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX),
        Val2 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'

Msg 213, Ebene 16, Zustand 1, Zeile 6 Fehler beim Einfügen: Spaltenname oder Nummer von gelieferten Werte stimmt nicht mit der Tabelle Definition.

Aber wenn man die obige Aussage in

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX),
        Val2 VARCHAR(MAX)
)

INSERT INTO @Table (Val1)  SELECT '1'

Werke. Sie müssen die angegebenen Spalten genauer spezifizieren

liefern Sie die Strukturen und wir können sie uns ansehen

13voto

CodeCoder Punkte 111

Das Problem ist, dass Sie versuchen, Daten in die Datenbank einzufügen, ohne Spalten zu verwenden. SQL Server gibt Ihnen diese Fehlermeldung.

Fehler: insert into users values('1', '2','3') - dies funktioniert gut, solange Sie nur 3 Spalten haben

Wenn Sie 4 Spalten haben, aber nur in 3 davon einfügen wollen

Richtig: insert into users (firstName,lastName,city) values ('Tom', 'Jones', 'Miami')

7voto

linitux Punkte 241

Hüten Sie sich vor Auslösern. Vielleicht liegt das Problem bei einer Operation im Trigger für eingefügte Zeilen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X