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

608voto

Norman Skinner Punkte 5947

Sie können es auf diese Weise versuchen:

/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable

323voto

gbn Punkte 407102

Nein.

Die beste Vorgehensweise bei der Wartung ist, nur die erforderlichen Spalten anzugeben.

Mindestens 2 Gründe:

  • Dadurch wird Ihr Vertrag zwischen Kunde und Datenbank stabil. Dieselben Daten, jedes Mal
  • Leistung, Abdeckung der Indizes

Bearbeiten (Juli 2011):

Wenn Sie aus dem Object Explorer die Columns Knoten für eine Tabelle erstellt, wird eine CSV-Spaltenliste im Abfragefenster angezeigt, womit eines Ihrer Ziele erreicht wird

109voto

Velizar VESSELINOV Punkte 1128

Ein moderner SQL-Dialekt wie BigQuery bietet hier eine hervorragende Lösung.

SELECT * EXCEPT(ColumnNameX, [ColumnNameY, ...])
FROM TableA

Dies ist eine sehr leistungsfähige SQL-Syntax, um eine lange Liste von Spalten zu vermeiden, die aufgrund von Änderungen der Tabellenspaltennamen immer wieder aktualisiert werden müssen. Und diese Funktion fehlt in der aktuellen SQL Server-Implementierung, was sehr schade ist. Es bleibt zu hoffen, dass Microsoft Azure eines Tages noch datenwissenschaftlerfreundlicher wird.

Datenwissenschaftler möchten eine schnelle Möglichkeit haben, eine Abfrage zu kürzen und einige Spalten zu entfernen (aufgrund von Duplikaten oder aus anderen Gründen).

https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers

104voto

Himanshu Jansari Punkte 29897

Wenn Sie nicht jeden Spaltennamen manuell eingeben wollen, können Sie Script Table As durch Rechtsklick auf Tabelle ou siehe en SSMS wie diese:

enter image description here

Dann erhalten Sie die gesamte Select-Abfrage in Neues Abfrage-Editor-Fenster dann entfernen Sie unerwünschte Spalten wie folgt:

enter image description here

Erledigt

87voto

pl80 Punkte 808

In SQL (SQL Server) ist dies automatisch möglich:

declare @cols varchar(max), @query varchar(max);
SELECT  @cols = STUFF
    (
        ( 
            SELECT DISTINCT '], [' + name
            FROM sys.columns
            where object_id = (
                select top 1 object_id from sys.objects
                where name = 'MyTable'
            )
            and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
            FOR XML PATH('')
        ), 1, 2, ''
    ) + ']';

SELECT @query = 'select ' + @cols + ' from MyTable';  
EXEC (@query);

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