Précédent   Forum des professionnels en informatique > Bases de données > Sybase > Adaptive Server Enterprise
Adaptive Server Enterprise Forum d'entraide concernant Sybase Adaptive Server Enterprise, le dataserver phare de Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2006, 10h02   #1
Invité régulier
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 9
Points : 9
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 :
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 :
CVince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 14h03   #2
Membre du Club
 
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 48
Points : 48
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 :
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
dbafranck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 14h15   #3
Membre du Club
 
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 48
Points : 48
Par défaut Rectification

L'execute est aussi en cause. Le code précédent pose problème à cause de cela.
dbafranck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 14h48   #4
Membre du Club
 
Inscription : décembre 2005
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 48
Points : 48
Points : 48
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 :
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
dbafranck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 15h30   #5
Invité régulier
 
Inscription : avril 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 15
Points : 9
Points : 9
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 :
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 !...)
CVince est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h14.


 
 
 
 
Partenaires

Hébergement Web