1153 Stimmen

Eine Spalte ausschließen mit SELECT * [except columnA] FROM tableA?

Wir alle wissen, dass wir alle Spalten einer Tabelle auswählen können, wenn wir

SELECT * FROM tableA

Gibt es eine Möglichkeit, Spalten aus einer Tabelle auszuschließen, ohne dass alle Spalten angegeben werden müssen?

SELECT * [except columnA] FROM tableA

Die einzige Möglichkeit, die ich kenne, besteht darin, alle Spalten manuell anzugeben und die unerwünschte Spalte auszuschließen. Das ist sehr zeitaufwändig, daher suche ich nach Möglichkeiten, Zeit und Mühe zu sparen, und auch für die künftige Wartung, wenn die Tabelle mehr oder weniger Spalten hat.

59 Stimmen

Es wäre sehr praktisch, diese Funktion zu haben, nicht um sie in den Produktionscode einzubauen, sondern für die Fehlersuche. Beispiel: Ich habe eine Tabelle mit mehreren Spalten, die ich abfrage, aber ich möchte schnell eine oder zwei Textspalten auslassen.

0 Stimmen

Ich brauchte dies, als ich mit openquery arbeitete (obwohl ich die Funktionalität in MySQL und nicht in SQL Server benötigte). Ich musste eine MySQL-Datenbank mit SQL Server abfragen. Da eine MySQL-Tabelle Char-Spalten mit fester Breite hatte, konnte ich keine SELECT * Abfrage (OLE DB hat Probleme, diese zuzuordnen). Ich konnte die richtigen Spalten nicht angeben, da ich keinen direkten Zugriff auf die MySQL-Datenbank hatte, aber SQL Server war so freundlich, mir die Namen der Char-Spalten mit fester Breite mitzuteilen...

9 Stimmen

Ich möchte noch einen weiteren Grund hinzufügen, dies zu tun: SELECT DISTINCT * außer für die Schlüsselspalte, damit sie ohne doppelte Zeilen funktioniert, die jemand anderes erstellt hat

6voto

Ronald Wildenberg Punkte 30961

Mir ist keine Datenbank bekannt, die dies unterstützt (SQL Server, MySQL, Oracle, PostgreSQL). Es ist definitiv nicht Teil der SQL-Standards, so dass ich denke, dass Sie nur die Spalten angeben müssen, die Sie wollen.

Sie könnten Ihre SQL-Anweisung natürlich auch dynamisch erstellen und vom Server ausführen lassen. Dies eröffnet jedoch die Möglichkeit einer SQL-Injektion

4voto

cairnz Punkte 3859

Rechtsklick auf die Tabelle im Objekt-Explorer, Auswahl der obersten 1000 Zeilen

Es werden alle Spalten aufgelistet und nicht *. Entfernen Sie dann die unerwünschte(n) Spalte(n). Das sollte viel schneller gehen, als wenn Sie es selbst eintippen.

Wenn Ihnen das zu viel Arbeit ist, rufen Sie die SQL-Eingabeaufforderung von Red Gate auf, geben ssf from tbl ein, gehen zu * und klicken erneut auf tab.

4voto

anonymous Punkte 41

Ich weiß, dass dies ein wenig alt ist, aber ich hatte gerade das gleiche Problem und suchte nach einer Antwort. Dann hat mir ein erfahrener Entwickler einen sehr einfachen Trick gezeigt.

Wenn Sie den Abfrageeditor von Management Studio verwenden, erweitern Sie die Datenbank und dann die Tabelle, aus der Sie auswählen, so dass Sie den Spaltenordner sehen können.

Markieren Sie in Ihrer Select-Anweisung einfach den obigen Ordner mit den referenzierten Spalten und ziehen Sie ihn per Drag & Drop in das Abfragefenster. Es werden alle Spalten der Tabelle eingefügt. Entfernen Sie dann einfach die Identitätsspalte aus der Liste der Spalten...

3voto

Charl Punkte 962

Ein Kollege riet zu einer guten Alternative:

  • Führen Sie SELECT INTO in Ihrer vorhergehenden Abfrage aus (wo Sie die Daten) in eine Tabelle (die Sie anschließend löschen werden). Dies wird die Struktur für Sie erstellen.
  • Führen Sie ein Skript als CREATE für eine neue Abfrage aus Fenster.
  • Entfernen Sie die unerwünschten Spalten. Formatieren Sie die verbleibenden Spalten zu einer 1-Zeilen-Liste und fügen Sie sie als Ihre Spaltenliste ein.
  • Löschen Sie die Tabelle, die Sie erstellt haben.

Erledigt...

Das hat uns sehr geholfen.

2voto

Valeriy Punkte 11

Das verwende ich oft für diesen Fall:

declare @colnames varchar(max)=''

select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4)

SET @colnames=RIGHT(@colnames,LEN(@colnames)-1)

@colnames parece column1,column2,column5

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