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

Sybase Discussion :

existence d'une table


Sujet :

Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut existence d'une table
    Bonjour à tous !


    J'essaye de tester l'existence d'une table et de la créer si non.


    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
    if  not exists(select name from miswork..sysobjects where name ='MKS_titres' and type='U') 
    begin
    	create table miswork..MKS_titres (
    		security_id int
    	)
     
     
    	insert into miswork..MKS_titres
    		select distinct 
    			IC.security_id	
    		from 
    			market..indice_component IC 
    		where
    			IC.indice_id in (1,2,3,9,10,19,21,22,20,11,12,15)
    end

    mais il me renvoie une erreur qui me laisse entendre que mon test ne fonctionne pas :

    There is already an object named 'MKS_titres' in the database. (Sur la ligne du create table)

    Vous en pensez quoi ? Merci !

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Le bloc de code entier est parsé d'un coup, ce qui fait que la clause IF n'a aucun effet.

    Il faut séparer le CREATE TABLE de l'INSERT pour avoir deux blocs d'exécution séparés, ou alors utiliser un EXECUTE IMMEDIATE.

    En isql on ferait donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if object_id('MKS_titres') is null
    begin
        create table MKS_titres ...
    end
    go
    insert MKS_titres 
      select ....
    go
    Ou alors, avec des EXECUTE IMMEDIATE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if object_id('MKS_titre') is null
    begin
       exec ("create table MKS_titre ( ...")
     
       exec ("insert MKS_titre select ....")
    end
    Michael

  3. #3
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    merci de la réponse, je ne connaissais pas non plus le object_id

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

Discussions similaires

  1. vérifier existence d'une table
    Par scoder dans le forum Installation
    Réponses: 5
    Dernier message: 17/01/2005, 14h14
  2. [JDBC]Tester l'existence d une table
    Par juflata dans le forum JDBC
    Réponses: 7
    Dernier message: 29/06/2004, 15h27
  3. [SQL - ASP] existance d'une table
    Par Larson dans le forum ASP
    Réponses: 4
    Dernier message: 02/06/2004, 10h41
  4. [VB.NET] Vérification d'existance d'une table
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/05/2004, 10h17
  5. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55

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