SQL Server: Ungültiger Spaltenname

75

Ich arbeite daran, die vorhandene gespeicherte SQL Server-Prozedur zu ändern. Ich habe der Tabelle zwei neue Spalten hinzugefügt und auch die gespeicherte Prozedur geändert, um auch diese beiden Spalten auszuwählen. Obwohl die Spalten in der Tabelle verfügbar sind, gibt SQL Server weiterhin diesen Fehler aus:

Ungültiger Spaltenname 'INCL_GSTAMOUNT'

Geben Sie hier die Bildbeschreibung ein

Kann mir bitte jemand sagen, was hier los ist?

Kamran Ahmed
quelle
2
Hast du es ausgeführt - bekommst du diesen Fehler? Das Aktualisieren von Intellisense kann einige Zeit dauern.
1
Haben Sie die gespeicherte Prozedur neu kompiliert?
Lokesh

Antworten:

208

Immer wenn mir dies passiert, drücke ich Ctrl+ Shift+ R, um zu aktualisieren intellisense, schließe das Abfragefenster (speichere es bei Bedarf) und starte dann eine neue Sitzung, die normalerweise recht gut funktioniert.

Ric
quelle
9
Ich habe den Tastenanschlag als ausreichend empfunden (vielen Dank!) - das Abfragefenster muss nicht geschlossen werden
Spatz
2
Vielen Dank dafür, dass es nach stundenlangem Stress wirklich geholfen hat.
Caroline Allen
1
BEEINDRUCKEND! Hat auch für mich gearbeitet!
Wakgtech
67

Könnte auch passieren, wenn Zeichenfolge in doppelte Anführungszeichen anstatt in einfache Anführungszeichen gesetzt wird.

Harry
quelle
1
Das war der Grund in meinem Fall - können Sie bitte den Grund dafür erklären
ImranNaqvi
Ugh ... DANKE! So dumm. Hatte dieses Problem bei der Abfrage des Datumsbereichs mit Datumsangaben in doppelten Anführungszeichen.
conner.xyz
Diese Lösung gilt auch für Sybase ASE
Chexpir
Wenn Sie doppelte Anführungszeichen verwenden, wird es als Spaltenname anstelle einer Zeichenfolge analysiert. Wenn dieser Spaltenname nicht verfügbar ist (eine Zeichenfolge ist normalerweise nicht als Spalte vorhanden), wird dieser Fehler angezeigt.
Jim Lutz
3

Dieser Fehler kann AUCH in gekapselten SQL-Anweisungen auftreten, z

DECLARE @tableName nvarchar (20) SET @tableName = 'GROC'

DECLARE @updtStmt nvarchar (4000)

SET @updtStmt = 'Update tbProductMaster_' + @ tableName + 'SET department_str =' + @tableName exec sp_executesql @updtStmt

Nur um festzustellen, dass Anführungszeichen fehlen, um den Parameter "@tableName" wie folgt weiter zu kapseln:

SET @updtStmt = 'Update tbProductMaster_' + @ tableName + 'SET department_str =' '' + @tableName + '' ''

Vielen Dank

Chagbert
quelle
2

Intellisense wird nicht automatisch aktualisiert, und Sie sollten sich nicht vollständig darauf verlassen

Madhivanan
quelle
2

Ich habe es versucht. Wenn Sie die Anweisung ausführen, um Ihre lokale Tabelle zu generieren, akzeptiert das Tool, dass dieser Spaltenname vorhanden ist. Markieren Sie einfach die Anweisung zur Tabellengenerierung in Ihrem Editorfenster und klicken Sie auf Ausführen.

Anderas
quelle
Diese Lösung war die einzige, die für mich funktioniert hat. Ich habe versucht, den lokalen Intellisense-Cache zu aktualisieren, gespeicherten Prozess wiederherzustellen, erneut eine Verbindung zu SQL Server herzustellen. Es hat nichts funktioniert, bis ich nur Code ausgeführt habe, um eine Tabelle mit einem neuen Spaltennamen zu erstellen, und dann zum Einfügen geändert habe.
Michael Bruesch
1

Beim Erstellen einer Ansicht wurde der gleiche Fehler angezeigt.

Stellen Sie sich eine ausgewählte Abfrage vor, die ohne Probleme ausgeführt wird:

select id
from products

Der Versuch, eine Ansicht aus derselben Abfrage zu erstellen, führt zu einem Fehler:

create view app.foobar as
select id
from products

Meldung 207, Ebene 16, Status 1, Prozedur foobar, Zeile 2
Ungültiger Spaltenname 'id'.

Für mich stellte sich heraus, dass es sich um ein Scoping-Problem handelte. Beachten Sie, dass die Ansicht in einem anderen Schema erstellt wird. Durch Angabe des Schemas der productsTabelle wurde das Problem behoben. Dh .. dbo.productsstatt nur products.

Molomby
quelle
1

Das folgende Verfahren hat mir geholfen, dieses Problem zu lösen, aber ich weiß nicht warum.

  1. Schneiden Sie den fraglichen Code aus, der durch die Zeilen in der Nachricht angegeben wird
  2. Speichern Sie die Abfrage (zB in Datei)
  3. Fügen Sie den Code dort ein, wo er vorher war
  4. Speichern Sie die Abfrage erneut

Auch wenn es sich anscheinend um dieselbe Abfrage handelt, die ausgeführt wird, wurde dieser Fehler nicht ausgelöst

Träumerei
quelle
Ich hatte ein ähnliches Problem. Ich denke, ein Editor-Fenster speichert temporäre Daten (exp. Temporäre Tabelle). Vielleicht helfen diese Schritte jemandem 1. Zurücksetzen des Editorfensters 2. Zurücksetzen von Daten (DROP TABLE #TempTable) 3. Zurücksetzen von SQL Server
SVPopov
0

mit Aktualisierungstabelle oder Schließen und Öffnen von SQL Server funktioniert dies

behzad
quelle
0

Ich hatte ein ähnliches Problem.

Problem war, dass es einen Auslöser für die Tabelle gab, der Änderungen in eine Überwachungsprotokolltabelle schrieb. In der Überwachungsprotokolltabelle fehlten Spalten.

William Monahan
quelle
1
Sie müssen mehr über eine Lösung zur Behebung des Problems in der Frage ausarbeiten, damit dies eine gültige Antwort ist. Vielen Dank.
BogdanC
0
There can be many things:
First attempt, make a select of this field in its source table;
Check the instance of the sql script window, you may be in a different instance;
Check if your join is correct;
Verify query ambiguity, maybe you are making a wrong table reference
Of these checks, run the T-sql script again

[Image of the script SQL][1]
  [1]: https://i.stack.imgur.com/r59ZY.png`enter code here
Junior Placido
quelle
0
  • Aktualisieren Sie Ihre Tabellen.
  • Starten Sie den SQL Server neu.
  • Achten Sie auf die Rechtschreibfehler in Query.
Khizer Amin
quelle
0

Ich habe festgestellt, dass beim Ausführen von Joins MSSQL"Ungültiger Spaltenname" ausgelöst wird, wenn sich die Tabelle, der Sie beitreten, nicht neben der Tabelle befindet, der Sie beitreten. Ich habe versucht, table1.row1und anzugeben table3.row3, habe aber immer noch den Fehler erhalten. es ging nicht weg, bis ich die Tabellen in der Abfrage neu ordnete. Anscheinend ist die Reihenfolge der Tabellen in der Anweisung wichtig.

+-------------+    +-------------+    +-------------+    
| table1      |    | table2      |    | table3      |    
+-------------+    +-------------+    +-------------+    
| row1 | col1 |    | row2 | col2 |    | row3 | col3 |    
+------+------+    +------+------+    +------+------+    
| ...  | ...  |    | ...  | ...  |    | ...  | ...  |    
+------+------+    +------+------+    +------+------+    

SELECT * FROM table1, table2 LEFT JOIN table3 ON row1 = row3; --throws an error
SELECT * FROM table2, table1 LEFT JOIN table3 ON row1 = row3; --works as expected
Nick Reed
quelle
0

Wenn Sie zur Spalte ALTER Table gehen und die Tabelle einschließlich der neuen Spalte im selben Skript sofort AKTUALISIEREN . Stellen Sie sicher, dass Sie den Befehl nach der Codezeile der Änderungstabelle wie folgt verwenden.GO

ALTER TABLE Location 
ADD TransitionType SMALLINT NULL
GO   

UPDATE Location SET TransitionType =  4

ALTER TABLE Location 
    ALTER COLUMN TransitionType SMALLINT NOT NULL
dush88c
quelle