Est-il possible de sélectionner toutes les colonnes de la table, sauf une (par exemple ID)?

J'utilise une application tierce qui a un nombre absurde de colonnes par table. Lorsque je sélectionne des données, j'ai souvent besoin de toutes les colonnes sauf l'ID. Ou toutes les colonnes sauf ID et DateCreated.

En utilisant les sys.columns, il est possible de find quelles colonnes sont disponibles dans une table. Comment puis-je utiliser cette information pour créer des déclarations? Quelle serait la meilleure façon de faire cela?

Ce script sélectionne toutes les colonnes de n'importe quelle table, à l'exception de la colonne de key primaire de la table et des noms de colonnes DateCreated.

 SELECT 'SELECT '+ SUBSTRING(LIST,1,LEN(LIST)-1) +' FROM [Person].[Address]' FROM ( SELECT '['+COL.COLUMN_NAME+'],' FROM INFORMATION_SCHEMA.COLUMNS COL LEFT JOIN ( SELECT CON.CONSTRAINT_TYPE, USG.TABLE_SCHEMA, USG.TABLE_NAME, USG.COLUMN_NAME, CON.CONSTRAINT_NAME, USG.TABLE_CATALOG FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE USG INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CON ON USG.CONSTRAINT_NAME = CON.CONSTRAINT_NAME )Q ON COL.TABLE_SCHEMA = Q.TABLE_SCHEMA AND COL.TABLE_NAME = Q.TABLE_NAME AND COL.TABLE_CATALOG = Q.TABLE_CATALOG AND COL.COLUMN_NAME = Q.COLUMN_NAME WHERE COL.TABLE_SCHEMA ='Person' AND COL.TABLE_NAME = 'Address' AND ( Q.CONSTRAINT_TYPE <> 'PRIMARY KEY' OR COL.COLUMN_NAME <> 'DateCreated' ) FOR XML PATH(''))L(LIST) 

Remplacez la string Person par votre schéma et Address With your table name

essayez d'utiliser la requête dynamic:

  DECLARE @Names VARCHAR(MAX) SELECT @Names = COALESCE(@Names + ', ', '') + Column_Name FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name='Table1' And Column_Name!='ID' DECLARE @Query VARCHAR(MAX) SELECT @Query = 'SELECT '+ @Names + ' INTO Table2 FROM Table1' exec (@Query) SELECT * from Table2