Ma méthode pour répondre à ce genre de problème :
Tout d'abord, je teste si la colonne désirée existe dans la table.
Pour cela je récupère le nombre d'occurrences de cette colonne (1 si elle exise, sinon 0) dans la table système syscolumns, pour la table Customers, grâce à la requête suivante :
SELECT count(*) FROM syscolumns WHERE name='NOM COLONNE'
AND id = (SELECT id FROM sysobjects
WHERE name='Customers' AND type='U')
Note : je récupère l'id de la table Customers dans sysobjects (le type 'U' est celui des Users Datatables ;-) pour ne compter que les colonnes correspondant à cette dernière.
Si le résultat est 1, la colonne existe déjà.
Si le résultat est 0, il suffit de la créer en exécutant une nouvelle requete du genre :
ALTER TABLE [Customers ] ADD [NOM COLONNE] [int] NULL
Pour illustration : mes deux fonctions VB2005 pour cet exemple :
Public
Function
TesterSiLaColonneExiste(
ByVal
psNomColonne
As
String
, _
ByVal
psNomTable
As
String
, _
ByVal
poConn
As
SqlClient.SqlConnection)
As
Boolean
If
poConn
Is
Nothing
Then
Return
False
Dim
sqlCmd
As
New
SqlClient.SqlCommand( _
"SELECT count(*) FROM syscolumns WHERE name='"
& psNomColonne &
"' "
& _
"AND id = (SELECT id FROM sysobjects " & _
"WHERE name='"
& psNomTable &
"' AND type='U')"
, poConn)
If
CType
(sqlCmd.ExecuteScalar(),
Integer
) = 0
Then
Return
False
Else
:
Return
True
End
If
End
Function
Public
Function
AjouterUneColonneEntier(
ByVal
psNomColonne
As
String
, _
ByVal
psNomTable
As
String
, _
ByVal
poConn
As
SqlClient.SqlConnection)
As
Boolean
If
poConn
Is
Nothing
Then
Return
False
Dim
sqlCmd
As
New
SqlClient.SqlCommand( _
"ALTER TABLE ["
& psNomTable &
"] ADD ["
& psNomColonne &
"] [int] NULL "
, _
poConn)
If
sqlCmd.ExecuteNonQuery > 0
Then 'la requête renvoie 1 si la colonne est bien créée
Return
True
Else
:
Return
False
End
If
End
Function