Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels 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/01/2007, 18h01   #1
Membre émérite
 
Avatar de Mathusalem
 
Inscription : décembre 2003
Messages : 994
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 994
Points : 914
Points : 914
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 :
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 :

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

Vous en pensez quoi ? Merci !
__________________
Solidarités Nouvelles face au Chômage association loi de 1901, indépendante de tout parti politique et de toute confession religieuse.
Mathusalem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 07h59   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
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 :
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 :
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
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 09h47   #3
Membre émérite
 
Avatar de Mathusalem
 
Inscription : décembre 2003
Messages : 994
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 994
Points : 914
Points : 914
merci de la réponse, je ne connaissais pas non plus le object_id
__________________
Solidarités Nouvelles face au Chômage association loi de 1901, indépendante de tout parti politique et de toute confession religieuse.
Mathusalem 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 19h57.


 
 
 
 
Partenaires

Hébergement Web