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

Adaptive Server Enterprise Sybase Discussion :

[ASE 12.5.3][TSQL] - Creation d'une table temporaire en dynamique


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 16
    Points
    16
    Par défaut [ASE 12.5.3][TSQL] - Creation d'une table temporaire en dynamique
    Bonjour à tous.

    Je tente de créer une table temporaire dynamiquement dans une procédure stockée, puis de faire appel à cette même table (toujours de façon dynamique).
    J'ai l'impression que la table n'est tout simplement pas créée.

    Auriez-vous une idée du pourquoi du comment ???

    Voici un exemple de 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
    16
    17
    CREATE PROC dbo.sps_test (
    	@table varchar(255)
                                      )
    AS
      BEGIN
     
    	DECLARE @create varchar(255),
    			@insert varchar(255)
     
     
    	SELECT @create = "create table " + @table + " (col smallint null)"
    	EXEC (@create)
     
    	SELECT @insert = "insert into " + @table + " select 1"
    	EXEC (@insert)
     
    END
    que j'appelle de cette manière :

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Points : 56
    Points
    56
    Par défaut
    Bonjour,
    Le problème n'est pas lié à l'utilisation de la fonction execute mais simplement à la durée de vie de la table qui est liée à celle de l'execution de la proc qui l'a créé.

    Lancez le code suivant pour voir que la table est bien créée.
    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
    19
    20
    21
    CREATE PROC dbo.sps_test2 (
                  @table varchar(255)
                                      )
    AS
      BEGIN
     
                  DECLARE @create varchar(255),
                                                  @insert varchar(255),
                                                  @select varchar(255)
     
     
                  SELECT @create = "create table " + @table + " (col smallint null)"
                  EXEC (@create)
     
                  SELECT @insert = "insert into " + @table + " select 1"
                  EXEC (@insert)
     
                  SELECT @select = "select * from " + @table
                  EXEC (@select)
     
     END

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Points : 56
    Points
    56
    Par défaut Rectification
    L'execute est aussi en cause. Le code précédent pose problème à cause de cela.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Points : 56
    Points
    56
    Par défaut
    En fait la durée de la vie de la table est liée à la durée de l'execute().
    -> Essayer le code suivant
    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
    CREATE PROC dbo.sps_test3 (
                  @table varchar(255)
                                      )
    AS
      BEGIN
     
                  DECLARE @create varchar(255),
                                                  @insert varchar(255),
                                                  @select varchar(255)
                       SELECT @create = "create table " + @table + " (col smallint null)"
                       SELECT @insert = "insert into " + @table + " select 1"
                       SELECT @select = "select * from " + @table
                       EXECUTE (@create  + 
                                @insert  +
                                @select)
      END

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par dbafranck
    L'execute est aussi en cause. Le code précédent pose problème à cause de cela.
    C'est bien ce que je pensais !

    Malheureusement, la proc étant conséquente, et la table dvant avoir une portée sur la proc complète (plus des sous procs), je vais donc opter pour une solution un peu crade du genre :
    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
    19
    20
    21
    CREATE PROC dbo.sps_test (
    	@id_unique varchar(255)
                                      )
    AS
      BEGIN
     
    	DECLARE @create varchar(255),
    			@insert varchar(255),
    			@drop varchar(255)
     
     
    	SELECT @create = "create table tempdb..maTable" + @id_unique + " (col smallint null)"
    	EXEC (@create)
     
    	SELECT @insert = "insert into tempdb..maTable" + @id_unique + " select 1"
    	EXEC (@insert)
     
    	SELECT @drop = "drop table tempdb..maTable" + @id_unique
    	EXEC (@drop)
     
    END
    En n'oubliant pas biensûr de gérer les exceptions et de supprimer la table en cas d'erreur.

    En tout cas, merci pour les réponses !
    (C'est quand même emmerdant ! Ce n'est pas vraiment si dynamique que ça !...)

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

Discussions similaires

  1. creation d'une table temporaire
    Par dark_botsay dans le forum ASP.NET
    Réponses: 10
    Dernier message: 04/08/2010, 14h10
  2. Comment eviter la creation d'une table temporaire
    Par JUSTIN Loïc dans le forum Requêtes
    Réponses: 12
    Dernier message: 26/03/2010, 14h39
  3. [ASE 12.5.4]Creation d'une table sous condition
    Par kalder dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 30/05/2008, 15h45
  4. Réponses: 4
    Dernier message: 16/06/2006, 15h30
  5. Creation d'une fonction temporaire avec droit datareader
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/10/2004, 14h26

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