Comment sélectionner certaines colonnes d'une table si la table contient plus de 100 colonnes

Je dois sélectionner 90 colonnes sur 107 colonnes de ma table.

Est-il possible d'écrire select * except( column1,column2,..) from table ou de toute autre manière pour get des colonnes spécifiques seulement, ou j'ai besoin d'écrire toutes les 90 colonnes dans l'instruction select?

Vous pouvez générer la list des colonnes:

 select name + ', ' from sys.columns where object_id = object_id('YourTable') and name not in ('column1', 'column2') 

Il est possible de le faire à la volée avec du SQL dynamic:

 declare @columns varchar(max) select @columns = case when @columns is null then '' else @columns + ', ' end + quotename(name) from sys.columns where object_id = object_id('YourTable') and name not in ('column1', 'column2') declare @query varchar(max) set @query = 'select ' + @columns + ' from YourTable' exec (@query) 

Non, il n'y a pas moyen de faire * EXCEPT some columns . SELECT * lui-même devrait rarement, voire jamais, être utilisé en dehors des tests EXISTS .

Si vous utilisez SSMS, vous pouvez faire glisser le dossier "columns" (sous une table) de l'Explorateur d'objects dans une window de requête, et il insèrera tous les noms de colonnes (vous pouvez alors les parcourir et supprimer les 17 tu ne veux pas)

Il n'y a aucun moyen en SQL de faire tout sélectionner EXCEPT col1, col2 etc.

La seule façon de faire cela est d'avoir votre application gérer cela, et de générer la requête SQL dynamicment.

Vous pouvez potentiellement faire un SQL dynamic pour cela, mais il semble que c'est trop. En outre, il est généralement considéré comme une mauvaise pratique d'utiliser SELECT *... et encore less SELECT * but not col3, col4, col5 car vous n'obtiendrez pas de résultats cohérents dans le cas de changements de table.

Utilisez simplement SSMS pour écrire une instruction select et supprimer les colonnes dont vous n'avez pas besoin. Cela devrait être simple.

Non – vous devez écrire toutes les colonnes dont vous avez besoin. Vous pourriez créer une vue pour cela, donc votre déclaration réelle pourrait utiliser select * (mais alors vous devez listr toutes les colonnes dans la vue).

Puisque vous ne devriez jamais utiliser select *, pourquoi est-ce un problème? Faites simplement glisser les colonnes depuis l'Explorateur d'objects et supprimez celles que vous ne voulez pas.