IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Existence d'un champ


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut Existence d'un champ
    Bonjour,

    J'ai une application c# qui charge un fichier sql pour mettre à jour ma base de données firebird embeded.

    Je voudrais savoir comment tester l'existence d'un champs en sql avant de lancer un alter table.
    Si MonChamps existe alors je fais rien
    sinon j'execute l'alter table... pour créer mon champs.

    Je ne peux pas le faire en C# mais je dois le faire directement dans mon script sql.

    Une idée?

    Ludo

  2. #2
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    Cette requete me retourne 'COMMENTAIRE' si le champs existe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     SELECT RDB$FIELD_NAME
      FROM RDB$RELATION_FIELDS
     WHERE RDB$RELATION_NAME='MATERIEL' and upper(RDB$FIELD_NAME) ='COMMENTAIRE'
    Maintenant il faudrait inclure cela dans un script.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    Salut,

    J'essai de me faire une procédure pour vérifier l'existence d'un champs avant de lancer un alter mais je ne m'en sors pas:

    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    create procedure CheckField (FieldName varchar(15), TableName varchar(25))
    returns (Exist INTEGER)
    AS BEGIN
    FOR SELECT RDB$FIELD_NAME
    FROM RDB$RELATION_FIELDS
    WHERE RDB$RELATION_NAME=TableName and upper(RDB$FIELD_NAME) =FieldName into :test
    DO BEGIN
    if (:test = FieldName) then 
    begin 
          Exist=1;
    end;
    else 
          Exist=0
    suspend; 
    END
    Qui pourrait m'aider sur ce coup

    Ludo

  4. #4
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Tu peux utiliser IF EXISTS comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    CREATE PROCEDURE CheckField (
      FieldName VARCHAR(31),
      TableName VARCHAR(31))
    RETURNS (
      Exist INTEGER)
    AS
    BEGIN
      IF (EXISTS (
        SELECT RDB$FIELD_NAME
        FROM RDB$RELATION_FIELDS
        WHERE RDB$RELATION_NAME = :TableName AND
          UPPER(RDB$FIELD_NAME) = :FieldName)) THEN
        Exist = 1;
      ELSE
        Exist = 0;
      SUSPEND; 
    END
    @+ Claudius

  5. #5
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Par défaut
    Salut,

    Merci pour ton aide mais le script ne fonctionne pas!
    Batch execution aborted
    J'obtiens un dynamic sql error error -104
    Error code: 335544851

    Il a l'air de se planter sur ou après le exist=1

    J'utilise la version 2.0.X de firebird en mode embeded

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    ben ça, en utilisant un mot réservé comme nom de variable, rien d'étonnant
    ceci dit je ne vois pas bien l'interet de la manoeuvre
    si un champ existe déjà, la création échouera et basta
    rien de bien grave

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester l'existence d'un champ dans une requête
    Par Reidid dans le forum Access
    Réponses: 3
    Dernier message: 23/01/2006, 23h02
  2. Tester l'existance d'un champ de formulaire .
    Par maxos75 dans le forum ASP
    Réponses: 3
    Dernier message: 21/12/2005, 13h47
  3. Tester l'existence d'un champ dans une table
    Par Oluha dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/09/2005, 12h19
  4. existance d un champ dans un formaulaire
    Par ddmonge dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/03/2005, 12h02
  5. Tester l'existence d'un champ
    Par Loko dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/12/2004, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo