Une version plus concise
SI COL_LONGUEUR('nom_table','nom_colonne') IS NULL
DÉBUT
/* La colonne n'existe pas ou l'appelant n'a pas la permission de voir l'objet */
FIN
Le point concernant les autorisations pour afficher les métadonnées s'applique à toutes les réponses, pas seulement à celle-ci.
Notez que le premier paramètre nom de table de COL_LONGUEUR
peut être au format un, deux ou trois parties, selon les besoins.
Un exemple faisant référence à une table dans une base de données différente est :
COL_LONGUEUR('AdventureWorks2012.RessourcesHumaines.Service','DateModification')
Une différence avec cette réponse, par rapport à l'utilisation des vues sur les métadonnées, est que les fonctions de métadonnées, telles que COL_LONGUEUR
, ne renvoient toujours que des données sur des modifications validées, quel que soit le niveau d'isolation en cours.
18 votes
Je ne pense pas qu'il y ait quelque chose de mal avec le code dans la question : Ça fonctionne bien pour moi en 2008 R2. (Peut-être que vous l'exécutez dans la mauvaise base de données ? Peut-être que votre base de données est sensible à la casse et que vous n'avez pas la bonne casse dans vos chaînes myTableName / myColumnName ? Ce type de requête semble plus flexible que la solution COL_LENGTH : je peux l'exécuter sur une base de données différente et même sur un lien de base de données en préfixant correctement " INFORMATION_SCHEMA ". Je ne voyais pas comment faire cela avec la fonction de métadonnées COL_LENGTH.
4 votes
@mwardm -
COL_LENGTH('AdventureWorks2012.RessourcesHumaines.Department ','ModifiedDate')
fonctionne correctement.7 votes
Petit conseil lié : si vous souhaitez mettre à jour une colonne juste après son ajout (je pense que de nombreux utilisateurs recherchaient cet article à cette fin), vous pourriez utiliser
EXEC sp_executesql
avec une déclaration deUPDATE
formée.2 votes
La vraie réponse est que vous devez ajouter la base de données à laquelle vous vérifiez afin que ce soit
FROM [VotreBaseDeDonnées].INFORMATION_SCHEMA.COLUMNS
1 votes
Vous pouvez également utiliser syscolumns et sysobjects très simplement.
0 votes
IF EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'columnName' AND Object_ID = Object_ID(N'schemaName.tableName')) BEGIN -- La colonne existe FIN