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

56voto

campo Punkte 1774

Sie können eine Ansicht erstellen, die die Spalten enthält, die Sie auswählen möchten, dann können Sie einfach select * aus der Sicht...

42voto

Anthony Faull Punkte 16853

Ja, das ist möglich (aber nicht empfohlen).

CREATE TABLE contact (contactid int, name varchar(100), dob datetime)
INSERT INTO contact SELECT 1, 'Joe', '1974-01-01'

DECLARE @columns varchar(8000)

SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob'
ORDER BY ORDINAL_POSITION

EXEC ('SELECT ' + @columns + ' FROM contact')

Erläuterung des Codes :

  1. Deklarieren Sie eine Variable zum Speichern einer durch Komma getrennten Liste von Spaltennamen. Der Standardwert ist NULL.
  2. Verwenden Sie eine Systemansicht, um die Namen der Spalten in unserer Tabelle zu ermitteln.
  3. Utilice SELECT @variable = @variable + ... FROM zur Verkettung der Spaltennamen. Diese Art von SELECT gibt keine Ergebnismenge zurück. Dieses Verhalten ist vielleicht undokumentiert, funktioniert aber in jeder Version von SQL Server. Als Alternative könnten Sie verwenden SET @variable = (SELECT ... FOR XML PATH('')) zur Verkettung von Zeichenketten.
  4. Verwenden Sie die ISNULL Funktion nur dann ein Komma voranzustellen, wenn es sich nicht um die erster Spaltenname ist. Verwenden Sie die QUOTENAME Funktion, um Leerzeichen und Satzzeichen in Spaltennamen zu unterstützen.
  5. Verwenden Sie die WHERE Klausel, um Spalten auszublenden, die wir nicht sehen wollen.
  6. Utilice EXEC (@variable) , auch bekannt als dynamisches SQL um das Problem zu lösen Spaltennamen zur Laufzeit aufzulösen. Dies ist erforderlich, weil wir die Spaltennamen zur Kompilierzeit nicht kennen.

22voto

MrTelly Punkte 14443

Wie die anderen gesagt haben, gibt es keine Möglichkeit, dies zu tun, aber wenn Sie Sql Server verwenden, ist ein Trick, den ich verwende, um die Ausgabe in Komma getrennt zu ändern, dann tun

select top 1 * from table

und schneiden Sie die gesamte Liste der Spalten aus dem Ausgabefenster aus. Dann können Sie auswählen, welche Spalten Sie haben möchten, ohne sie alle eintippen zu müssen.

13voto

marc_s Punkte 701497

Im Grunde kann man nicht alles machen, was man möchte - aber man kann sich die richtigen Hilfsmittel besorgen, die einem die Arbeit ein wenig erleichtern.

Wenn Sie sich Red-Gate's SQL-Eingabeaufforderung Sie können "SELECT * FROM MyTable" eingeben und dann den Cursor nach dem "*" zurückbewegen und <TAB> drücken, um die Liste der Felder zu erweitern und die wenigen Felder zu entfernen, die Sie nicht benötigen.

Es ist keine perfekte Lösung - aber eine verdammt gute! :-) Schade, dass MS SQL Server Management Studio's Intellisense immer noch nicht intelligent genug ist, um diese Funktion anzubieten.......

Marc

12voto

Lu Blue Punkte 179

Wenn Sie eine Spalte mit empfindlicher Groß-/Kleinschreibung ausschließen möchten, wie z. B. das Kennwort, tue ich dies, um den Wert auszublenden:

SELECT * , "" as password FROM tableName;

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