Wählen aller Spalten
Das Sternchen (*) hat in SELECT-Anweisungen eine besondere Bedeutung:
Wenn es ohne Qualifizierer angegeben ist, wird das Sternchen (*) als Verweis auf alle Spalten in allen Tabellen oder Sichten aufgelöst, die in der FROM-Klausel angegeben sind. Mit dem folgenden Beispiel werden sämtliche in der Product-Tabelle gespeicherten Produktinformationen abgerufen:
USE AdventureWorks2008R2; GO SELECT * FROM Production.Product ORDER BY Name; GO
Wenn das Sternchen (*) mit einem Tabellen- oder Sichtnamen gekennzeichnet ist, wird es als Verweis auf alle Spalten in der betreffenden Tabelle oder Sicht aufgelöst. Das folgende Beispiel verwendet das Sternchen, um auf alle Spalten in der Product-Tabelle zu verweisen:
USE AdventureWorks2008R2; GO SELECT s.UnitPrice, p.* FROM Production.Product p JOIN Sales.SalesOrderDetail s ON (p.ProductID = s.ProductID) ORDER BY p.ProductID; GO
Wenn das Sternchen (*) verwendet wird, werden die Spalten im Resultset in derselben Reihenfolge ausgegeben, in der sie in der CREATE TABLE-, ALTER TABLE- oder CREATE VIEW-Anweisung angegeben wurden.
Da SELECT * alle zum aktuellen Zeitpunkt in einer Tabelle enthaltenen Spalten ermittelt, werden Änderungen in der Struktur einer Tabelle (durch Hinzufügen, Entfernen oder Umbenennen von Spalten) automatisch widergespiegelt, wenn eine SELECT *-Anweisung ausgeführt wird.
Wenn eine SELECT-Anweisung in einer Anwendung oder einem Skript verwendet wird, deren bzw. dessen Logik von der Anzahl der Spalten im Resultset abhängig ist, ist es empfehlenswert, anstelle eines Sternchens alle Spalten in der Auswahlliste anzugeben. Wenn Spalten später zu den Tabellen oder Sichten hinzugefügt werden, auf die die SELECT-Anweisung verweist, werden die Änderungen nicht an die Anwendung weitergegeben, wenn die Spalten einzeln aufgeführt wurden. Wenn das Sternchen (*) angegeben wurde, werden die neuen Spalten Teil des Resultsets und können die Logik der Anwendung oder des Skripts beeinflussen. Vermeiden Sie die Verwendung des Sternchens (*) insbesondere für Katalogsichten, dynamische Verwaltungssichten und Systemfunktionen mit Tabellenrückgabe. Bei zukünftigen Aktualisierungen und Versionen von Microsoft SQL Server könnten diesen Sichten und Funktionen Spalten hinzugefügt oder die Reihenfolge der Spalten geändert werden. Diese Änderungen könnten zur Funktionsunfähigkeit von Anwendungen führen, die eine bestimmte Reihenfolge und Anzahl von Spalten erwarten.
Das folgende Beispiel ruft alle Spalten der Customer-Tabelle ab und zeigt sie in der Reihenfolge an, in der sie bei der Erstellung der Customer-Tabelle definiert wurden:
USE AdventureWorks2008R2;
GO
SELECT *
FROM Sales.Customer
ORDER BY CustomerID ASC;
GO
Genau dieselben Ergebnisse erhalten Sie, indem Sie alle Spaltennamen der Tabelle nach der SELECT-Anweisung in der entsprechenden Reihenfolge explizit aufführen.
USE AdventureWorks2008R2;
GO
SELECT CustomerID, TerritoryID, AccountNumber, rowguid, ModifiedDate
FROM Sales.Customer
ORDER BY CustomerID ASC
GO
Hinweis |
---|
Zum Anzeigen der Spaltennamen einer Tabelle können Sie sp_help oder eine der folgenden Abfragen verwenden: SELECT name FROM sys.columns WHERE OBJECT_ID IN (SELECT OBJECT_ID ('table_name')) oder SELECT TOP 0 * FROM table_name. |