it-swarm.com.de

SQL Server meldet "Ungültiger Spaltenname", die Spalte ist jedoch vorhanden und die Abfrage arbeitet mit Management Studio

Ich bin etwas in eine Sackgasse geraten. Ich habe eine Abfrage, die von einem C#-Code generiert wird. Die Abfrage funktioniert in Microsoft SQL Server Management Studio gut, wenn sie für dieselbe Datenbank ausgeführt wird.

Wenn mein Code jedoch versucht, dieselbe Abfrage auszuführen, erhalte ich dieselbe Fehlermeldung bezüglich einer ungültigen Spalte und eine Ausnahme wird ausgelöst. Alle Abfragen, die auf diese Spalte verweisen, schlagen fehl.

Die betreffende Spalte wurde kürzlich zur Datenbank hinzugefügt. Dies ist eine Datumsspalte mit dem Namen Incident_Begin_Time_ts

Ein Beispiel, das fehlschlägt, ist:

select * from PerfDiag 
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';

Andere Abfragen wie Select MAX(Incident_Being_Time_ts); schlagen ebenfalls fehl, wenn sie im Code ausgeführt werden, da sie der Meinung sind, dass die Spalte fehlt. 

Irgendwelche Ideen?

87
kidl33t

Ich vermute, dass Sie zwei Tabellen mit demselben Namen haben. Einer gehört dem Schema 'dbo' (dbo.PerfDiag) und der andere dem Standardschema des Kontos, das für die Verbindung zum SQL Server verwendet wird (etwa userid.PerfDiag).

Wenn Sie über einen uneingeschränkten Verweis auf ein Schemaobjekt (z. B. eine Tabelle) verfügen, das nicht durch den Schemanamen qualifiziert ist, muss der Objektverweis aufgelöst werden. Die Namensauflösung erfolgt durch Suchen in der folgenden Reihenfolge nach einem Objekt des entsprechenden Typs (Tabelle) mit dem angegebenen Namen. Der Name wird bis zum ersten Treffer aufgelöst:

  • Unter dem Standardschema des Benutzers.
  • Unter dem Schema 'Dbo'.

Die unqualifizierte Referenz ist an die erste Übereinstimmung in der obigen Reihenfolge gebunden.

Als allgemeine empfohlene Vorgehensweise sollten Sie aus Leistungsgründen immer Referenzen auf Schemaobjekte qualifizieren:

  • Ein nicht qualifizierter Verweis kann einen zwischengespeicherten Ausführungsplan für die gespeicherte Prozedur oder Abfrage ungültig machen, da sich das Schema, an das der Verweis gebunden ist, abhängig von den Anmeldeinformationen ändern kann, die die gespeicherte Prozedur oder Abfrage ausführen. Dies führt bei der erneuten Kompilierung der Abfrage/gespeicherten Prozedur zu einem Leistungstreffer. Bei Neuzusammenstellungen werden Kompilierungssperren gelöscht, sodass andere nicht auf die erforderlichen Ressourcen zugreifen können.

  • Die Namensauflösung verlangsamt die Abfrageausführung, da zwei Tests durchgeführt werden müssen, um die wahrscheinliche Version des Objekts (die "dbo") aufzulösen. Dies ist der übliche Fall. Nur wenn ein einzelner Probe den Namen auflöst, ist der aktuelle Benutzer ein Objekt mit dem angegebenen Namen und Typ.

[Zur weiteren Anmerkung bearbeitet]

Die anderen Möglichkeiten sind (in keiner bestimmten Reihenfolge):

  • Sie sind nicht mit der Datenbank verbunden, von der Sie glauben, dass Sie sind.
  • Sie sind nicht mit der SQL Server-Instanz verbunden, von der Sie denken, dass Sie dies sind.

Überprüfen Sie Ihre Verbindungszeichenfolgen und stellen Sie sicher, dass sie explizit den Namen der SQL Server-Instanz und den Namen der Datenbank angeben.

57
Nicholas Carey

Drücken Sie einfach Ctrl + Shift + R und sehen...

In SQL Server Management Studio wird mit Strg + Umschalt + R der lokale Cache aktualisiert.

227
Mangesh

Wenn Sie dies innerhalb einer Transaktion ausführen und bevor eine SQL-Anweisung die Tabelle löscht/ändert, können Sie auch diese Nachricht erhalten.

7
Stagg

Hatte gerade das gleiche Problem. Ich habe einige Alias-Spalten in einer temporären Tabelle umbenannt, die von einem anderen Teil desselben Codes weiter verwendet wird. Aus irgendeinem Grund wurde dies nicht von SQL Server Management Studio erfasst und es beschwerte sich über ungültige Spaltennamen.

Ich habe einfach eine neue Abfrage erstellt, den SQL-Code aus der alten Abfrage in diese neue Abfrage einfügen und ihn erneut ausführen. Dies schien die Umgebung richtig aufzufrischen.

2
ApplePie

Wenn Sie Variablen mit demselben Namen wie Ihre Spalte verwenden, haben Sie möglicherweise den Variablenmarker "@" vergessen. In einer INSERT-Anweisung wird es als Spalte erkannt.

2
Dévan Coetzee

In meinem Fall starte ich Microsoft SQL Server Management Studio neu und das funktioniert gut für mich.

1
Rexhi

Ich habe schließlich Microsoft SQL Server Management Studio heruntergefahren und neu gestartet. und das hat es für mich behoben. Zu anderen Zeiten reichte es jedoch aus, ein neues Abfragefenster zu starten.

1
IAM_AL_X

In meinem Fall scheint das Problem ein seltsames Caching-Problem zu sein. Die oben genannten Lösungen haben nicht funktioniert.

Wenn der Code einwandfrei funktioniert hat und Sie einer Ihrer Tabellen eine Spalte hinzugefügt haben und der Fehler "Ungültiger Spaltenname" ausgegeben wird und die oben genannten Lösungen nicht funktionieren, versuchen Sie Folgendes: Führen Sie zunächst nur den Codeabschnitt aus, um die geänderten zu erstellen Tabelle und führen Sie dann den gesamten Code aus.

0
LoMaPh

Einschließlich dieser Antwort, da dies das beste Ergebnis für "ungültiger Spaltenname sql" bei Google war und ich diese Antwort hier nicht gesehen habe. In meinem Fall habe ich den ungültigen Spaltennamen Id1 erhalten, weil ich in meinem .HasForeignKey-Statement in meinem Entity Framework C # -Code die falsche ID verwendet hatte. Nachdem ich es geändert hatte, um mit der ID des Objekts .HasOne () übereinzustimmen, war der Fehler verschwunden. 

0
Daniel

In meinem Fall habe ich versucht, den Wert von falschem ResultSet beim Abfragen mehrerer SQL-Anweisungen abzurufen.

0
Deepak Kataria