Sélection de toutes les colonnes
L'astérisque (*) possède une signification particulière dans les instructions SELECT :
Lorsqu'il est spécifié sans qualificateur, l'astérisque (*) fait référence à toutes les colonnes de toutes les tables ou vues mentionnées dans la clause FROM. L'exemple suivant extrait toutes les informations de produit stockées dans la table Product :
USE AdventureWorks2008R2; GO SELECT * FROM Production.Product ORDER BY Name; GO
S'il est qualifié avec un nom de table ou de vue, l'astérisque (*) fait référence à toutes les colonnes de la table ou de la vue mentionnée. L'exemple suivant utilise l'astérisque pour faire référence à toutes les colonnes de la table Product :
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
Lorsqu'un astérisque (*) est utilisé, les colonnes sont présentées dans le même ordre que dans les instructions CREATE TABLE, ALTER TABLE ou CREATE VIEW.
Puisque SELECT * extrait toutes les colonnes d'une table, toute modification apportée à la structure d'une table (ajout, suppression ou modification de nom de colonnes) se répercute automatiquement à chaque exécution d'une instruction SELECT *.
Si une instruction SELECT est utilisée dans une application ou un script dont la logique dépend du nombre de colonnes dans l'ensemble de résultats, il est préférable d'énumérer toutes les colonnes dans la liste de sélection plutôt que d'utiliser un astérisque. Si des colonnes sont par la suite ajoutées à la table ou aux vues référencées par l'instruction SELECT, l'application est protégée de la modification à condition que les colonnes aient été répertoriées individuellement. Si un astérisque (*) a été spécifié, les nouvelles colonnes deviennent une partie de l'ensemble de résultats et peuvent compromettre la logique de l'application ou du script. Évitez d'utiliser l'astérique (*), surtout avec des vues de catalogue, des vues de gestion dynamique et des fonctions table système. Les prochaines mises à niveau et versions de Microsoft SQL Server pourraient ajouter des colonnes et modifier l'ordre des colonnes dans ces vues et fonctions. Ces changements pourraient gêner des applications qui attendent un ordre et un nombre de colonnes bien spécifiés.
L'exemple suivant extrait toutes les colonnes de la table Customer et les affiche dans l'ordre dans lequel elles ont été définies lors de la création de la table.
USE AdventureWorks2008R2;
GO
SELECT *
FROM Sales.Customer
ORDER BY CustomerID ASC;
GO
Il est possible d'obtenir les mêmes résultats en énumérant, de manière explicite et dans l'ordre, tous les noms des colonnes de la table après l'instruction SELECT.
USE AdventureWorks2008R2;
GO
SELECT CustomerID, TerritoryID, AccountNumber, rowguid, ModifiedDate
FROM Sales.Customer
ORDER BY CustomerID ASC
GO
Notes
Pour afficher les noms des colonnes d'une table, utilisez sp_help ou l'une des requêtes suivantes : SELECT name FROM sys.columns WHERE OBJECT_ID IN (SELECT OBJECT_ID ('table_name')) ou SELECT TOP 0 * FROM table_name.