Comment sélectionner des noms de colonne spécifiques dans SQL Server

Voici ma question précédente sur comment répéter une string dans SQL Server:

Maintenant, comment puis-je sélectionner spécifiquement les noms de colonnes? voici mon code pour sélectionner les colonnes:

SELECT 'Field '+CAST(ROW_NUMBER() OVER (ORDER BY ordinal_position) AS varchar(5))+': ' + COLUMN_NAME FROM information_schema.columns WHERE table_Name = 'SystemDefined' and table_schema = 'schemaAsset' 

Voici la sortie:

 Field 1: Asset_No Field 2: AssetCategory Field 3: AssetClassification Field 4: PurchaseType Field 5: Department Field 6: RespPerson Field 7: Status Field 8: Location 

C'est la sortie que je veux lors de la sélection de noms de colonnes spécifiques:

 Field 1: Asset_No Field 2: AssetCategory Field 3: AssetClassification Field 4: PurchaseType Field 5: Department Field 6: RespPerson Field 7: Status 

Que diriez-vous d'utiliser NOT IN que vous pouvez utiliser sur la clause WHERE pour spécifier une autre condition.

 SELECT... FROM.. WHERE table_Name = 'SystemDefined' AND table_schema = 'schemaAsset' AND COLUMN_NAME NOT IN ('Status',....) -- specify the list of names you -- don't want to show 

À less de manquer quelque chose, vous pouvez simplement utiliser une clause WHERE pour exclure les colonnes que vous ne voulez pas:

 SELECT 'Field ' + CAST(ROW_NUMBER() OVER (ORDER BY ordinal_position) AS varchar(5))+': ' + COLUMN_NAME FROM information_schema.columns WHERE table_Name = 'SystemDefined' and table_schema = 'schemaAsset' and COLUMN_NAME <> 'Location' 

Si vous avez plusieurs colonnes, vous pouvez utiliser NOT IN ('Location', 'etc')

Recommandz sys.columns au lieu de INFORMATION_SCHEMA ( voici pourquoi ).

 SELECT 'Column ' + CONVERT(VARCHAR(5), ROW_NUMBER() OVER (ORDER BY column_id)) + ': ' + name FROM sys.columns WHERE [object_id] = OBJECT_ID(N'schemaAsset.SystemDefined') AND name NOT IN ('Location' /* , ... other columns ... */) ORDER BY column_id; -- because you never know how SQL Server might order