J'ai besoin d'ajouter une colonne spécifique si elle n'existe pas. J'ai quelque chose comme ce qui suit, mais il renvoie toujours faux:
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTableName'
AND COLUMN_NAME = 'myColumnName')
Comment puis-je vérifier si une colonne existe dans une table de la base de données SQL Server?
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
fonctionne très bien.EXEC sp_executesql
avec uneUPDATE
instruction formée .FROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Réponses:
SQL Server 2005 et suivants:
La version de Martin Smith est plus courte:
la source
sys.columns
Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
COL_LENGTH
doivent être non cités. Il est théoriquement possible pour quelqu'un de créer une colonne qui a en fait un nom de[COLUMN_NAME]
- par exemple,CREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #T
et ce serait ambigu si ce n'était pas la règle.Une version plus concise
Le point concernant les autorisations sur l'affichage des métadonnées s'applique à toutes les réponses et pas seulement à celle-ci.
Notez que le premier nom de la table de paramètres à
COL_LENGTH
peut être au format de nom à une, deux ou trois parties selon les besoins.Un exemple référençant une table dans une base de données différente est
Une différence avec cette réponse par rapport à l'utilisation des vues de métadonnées est que les fonctions de métadonnées telles que
COL_LENGTH
toujours ne renvoient que des données sur les modifications validées quel que soit le niveau d'isolement en vigueur.la source
IF OBJECT_ID('TableName','U') IS NULL
pour vérifier l'existence d'un objet ouDB_ID('foo')
pour vérifier l'existence d'une base de données.x>>2
au lieu dex/4
C ++. Le code plus verbeux (if exists (select column_name from information_schema ...)
) prend beaucoup plus d'espace, mais personne ne se gratterait la tête en essayant de comprendre ce qu'il fait.INFORMATION_SCHEMA
vues ou ausys.columns
disque, tout enCOL_LENGTH
utilisant des métadonnées de base de données mises en cache.Ajustez ce qui suit pour répondre à vos besoins spécifiques:
Modifier pour traiter la modification à la question : Cela devrait fonctionner - regardez attentivement votre code pour les erreurs stupides; par exemple, interrogez-vous INFORMATION_SCHEMA sur la même base de données que votre insert? Avez-vous une faute de frappe dans le nom de votre table / colonne dans l'une ou l'autre instruction?
la source
Essaye ça...
la source
SELECT 1
place deSELECT TOP 1 1
;).EXISTS
instruction, SQL optimise automatiquement les colonnes (un peu commecount(*)
), doncSELECT *
cela suffira.and [TABLE_SCHEMA] = '???'
à la clause WHERE.Pour les personnes qui vérifient l'existence de la colonne de la supprimer.
À partir de SQL Server 2016, vous pouvez utiliser de nouvelles instructions DIE au lieu de gros
IF
wrappersla source
Je préférerais
INFORMATION_SCHEMA.COLUMNS
une table système car Microsoft ne garantit pas de conserver les tables système entre les versions. Par exemple,dbo.syscolumns
fonctionne toujours dans SQL 2008, mais il est obsolète et pourrait être supprimé à tout moment à l'avenir.la source
INFORMATION_SCHEMA
vues ne contiennent que des métadonnées standard ANSI. Cependant, cela suffit pour un test d'existence.Vous pouvez utiliser les vues du système de schéma d'informations pour découvrir à peu près tout sur les tables qui vous intéressent:
Vous pouvez également interroger des vues, des procédures stockées et à peu près tout sur la base de données à l'aide des vues Information_schema.
la source
Essayez quelque chose comme:
Ensuite, utilisez-le comme ceci:
Il devrait fonctionner à la fois sur SQL Server 2000 et SQL Server 2005. Vous n'êtes pas sûr de SQL Server 2008, mais vous ne voyez pas pourquoi.
la source
Vérifiez d'abord si la combinaison
table
/column
(id
/name
) existe dansdbo.syscolumns
(une table SQL Server interne qui contient des définitions de champ), et sinon lancez laALTER TABLE
requête appropriée pour l'ajouter. Par exemple:la source
Un bon ami et collègue m'a montré comment vous pouvez également utiliser un
IF
bloc avec des fonctions SQLOBJECT_ID
etCOLUMNPROPERTY
dans SQL SERVER 2005+ pour rechercher une colonne. Vous pouvez utiliser quelque chose de similaire au suivant:Vous pouvez voir par vous-même ici
la source
COLUMNPROPERTY
uniquement.la source
Cela a fonctionné pour moi dans SQL 2000:
la source
Essaye ça
la source
INFORMATION_SCHEMA.TABLES
et vous ne filtrez pas les colonnes pour une table spécifique, il retournera donc parfois plus d'une ligne pour les mêmes noms de colonnes dans des tables séparées;).J'avais besoin de similaires pour SQL SERVER 2000 et, comme le souligne @Mitch, cela ne fonctionne que dans la version 2005+.
Si cela devait aider quelqu'un d'autre, c'est ce qui a finalement fonctionné pour moi:
la source
la source
la source
Une version de table temporaire de la réponse acceptée :
la source
la source
La réponse de Wheat est bonne, mais suppose que vous n'avez pas de paires nom de table / nom de colonne identiques dans un schéma ou une base de données. Pour le rendre sûr pour cette condition, utilisez ceci ...
la source
Il existe plusieurs façons de vérifier l'existence d'une colonne. Je recommanderais fortement de l'utiliser
INFORMATION_SCHEMA.COLUMNS
tel qu'il est créé afin de communiquer avec l'utilisateur. Considérez les tableaux suivants:et même d'autres méthodes d'accès disponibles pour vérifier
system catalog.
Aussi, pas besoin d’utiliser
SELECT *
, testez-le simplementNULL value
la source
SELECT *
avecEXISTS
, parce que quand il est utilisé EXISTE ne sélectionne pas vraiment toutes les lignes et toutes les colonnes, en interne , il vérifie seulement l'existence et non en fait des contrôles pour toutes les lignes et colonnesL'une des solutions les plus simples et les plus compréhensibles est:
la source
Voici un script simple que j'utilise pour gérer l'ajout de colonnes dans la base de données:
Dans cet exemple, le
Name
est leColumnName
à ajouter etObject_Id
leTableName
la source
La requête ci-dessous peut être utilisée pour vérifier si la colonne recherchée existe ou non dans le tableau. Nous pouvons également prendre une décision en fonction du résultat de la recherche, comme indiqué ci-dessous.
la source
Encore une autre variation ...
la source
table -> table de script en tant que -> nouvelles fenêtres - vous avez un script de conception. vérifier et trouver le nom de la colonne dans de nouvelles fenêtres
la source
Exécutez la requête ci-dessous pour vérifier si la colonne existe dans le tableau donné:
la source
Une autre contribution est l'exemple suivant qui ajoute la colonne si elle n'existe pas.
J'espère que cela aide. Simone
la source
la source
la source
Faites quelque chose si la colonne n'existe pas:
Faites quelque chose si la colonne existe:
la source