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

2voto

Vladimir Djuricic Punkte 4017

Ich habe es so gemacht und es funktioniert einwandfrei (Version 5.5.41):

# prepare column list using info from a table of choice
SET @dyn_colums = (SELECT REPLACE(
GROUP_CONCAT(`COLUMN_NAME`), ',column_name_to_remove','') 
FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE 
`TABLE_SCHEMA`='database_name' AND `TABLE_NAME`='table_name');

# set sql command using prepared columns
SET @sql = CONCAT("SELECT ", @dyn_colums, " FROM table_name");

# prepare and execute
PREPARE statement FROM @sql;
EXECUTE statement;

2voto

Dusan Punkte 11

Manchmal muss ein und dasselbe Programm mit verschiedenen Datenbankstrukturen umgehen. Ich konnte also keine Spaltenliste im Programm verwenden, um Fehler in select Erklärungen.

* gibt mir alle optionalen Felder. Vor der Verwendung prüfe ich, ob die Felder in der Datentabelle vorhanden sind. Dies ist der Grund für die Verwendung von * en select .

So gehe ich mit ausgeschlossenen Feldern um:

Dim da As New SqlDataAdapter("select * from table", cn)
da.FillSchema(dt, SchemaType.Source)
Dim fieldlist As String = ""
For Each DC As DataColumn In DT.Columns
   If DC.ColumnName.ToLower <> excludefield Then
    fieldlist = fieldlist &  DC.Columnname & ","
   End If
  Next

2voto

Jiadong Chen Punkte 59

In Hive Sql können Sie dies tun:

set hive.support.quoted.identifiers=none;
select 
    `(unwanted_col1|unwanted_col2|unwanted_col3)?+.+`
from database.table

so erhalten Sie die restlichen Spalten

2voto

Gustavo Punkte 359

Nun, es ist eine gängige bewährte Praxis, die gewünschten Spalten zu spezifizieren, anstatt nur * anzugeben. Sie sollten also nur angeben, welche Felder Ihr Select zurückgeben soll.

1voto

Weihui Guo Punkte 3218

Ich weiß, dass diese Frage schon alt ist, aber ich hoffe, dass sie immer noch hilfreich ist, denn die Antwort ist inspiriert von einer Diskussion aus SQL Server-Foren . Sie können dies zu einem gespeicherte Prozedur . Sie kann auch geändert werden, um mehr als ein Feld hinzuzufügen.

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ', ', ' ' ) + name from sys.columns where name not in ('colName1','colName2') and object_id = (Select id from sysobjects where name = 'tblName')
SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + 'tblName'
EXEC sp_executesql  @SQL

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