IF EXISTS (SELECT * FROM MASTER.DBO.SYSDATABASES WHERE NAME = 'PUBSI') BEGIN GOTO PUBS END ELSE BEGIN GOTO NORTHWIND END
PUBS: USE PUBS GOTO DEBUT
NORTHWIND: USE NORTHWIND GOTO DEBUT
DEBUT:
SELECT * FROM DBO.SYSOBJECTS
br
"Dge" wrote in message news:
Bonjour à tous,
Je cherche à verifier l'existance d'une base sur un serveur. Si elle existe je fais un truc sinon un autre.
Le soucis c'est qu'en faisant :
USE base Select * from table
si la base n'existe pas, une erreur est générée.
Il me faudrait un truc style
If exists (USE table) ...
Et cela est impossible.
Quelqu'un a t il une idée ?
Merci par avance
Dge
Fred BROUARD
Si c'est en production que tu veut faire ce test, mieux vaut utiliser les vues d'information de schéma (INFORMATION_SCHEMA.SCHEMATA) et non les tables systèmes (SYSDATABASES) en effet, Microsoft se réserve le droit de modifier sans préavis la structure des tables systèmes car elles sont réservées à l'usage interne. En revanche les vues d'information de schéma sont normalisée (SQL:1992) et leur structure ne varie pas d'une version à l'autre.
Donc :
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE CATALOG_NAME = 'PUBSI') ...
Autre chose : ce que t'as donné bruno : IF EXISTS (SELECT * FROM MASTER.DBO.SYSDATABASES WHERE NAME = 'PUBSI') Est susceptible de ne pas fonctionner si le serveur a été installé avec une collation forte. En effet il faut faire : IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = 'PUBSI') ... car les noms des objets MS SQL Server sont la plupart du temps en minuscule
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Dge a écrit:
Bonjour à tous,
Je cherche à verifier l'existance d'une base sur un serveur. Si elle existe je fais un truc sinon un autre.
Le soucis c'est qu'en faisant :
USE base Select * from table
si la base n'existe pas, une erreur est générée.
Il me faudrait un truc style
If exists (USE table) ...
Et cela est impossible.
Quelqu'un a t il une idée ?
Merci par avance
Dge
Si c'est en production que tu veut faire ce test, mieux vaut utiliser les vues
d'information de schéma (INFORMATION_SCHEMA.SCHEMATA) et non les tables systèmes
(SYSDATABASES) en effet, Microsoft se réserve le droit de modifier sans préavis
la structure des tables systèmes car elles sont réservées à l'usage interne. En
revanche les vues d'information de schéma sont normalisée (SQL:1992) et leur
structure ne varie pas d'une version à l'autre.
Donc :
IF EXISTS (SELECT *
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE CATALOG_NAME = 'PUBSI')
...
Autre chose : ce que t'as donné bruno :
IF EXISTS (SELECT * FROM MASTER.DBO.SYSDATABASES WHERE NAME = 'PUBSI')
Est susceptible de ne pas fonctionner si le serveur a été installé avec une
collation forte.
En effet il faut faire :
IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = 'PUBSI') ...
car les noms des objets MS SQL Server sont la plupart du temps en minuscule
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Dge a écrit:
Bonjour à tous,
Je cherche à verifier l'existance d'une base sur un serveur.
Si elle existe je fais un truc sinon un autre.
Si c'est en production que tu veut faire ce test, mieux vaut utiliser les vues d'information de schéma (INFORMATION_SCHEMA.SCHEMATA) et non les tables systèmes (SYSDATABASES) en effet, Microsoft se réserve le droit de modifier sans préavis la structure des tables systèmes car elles sont réservées à l'usage interne. En revanche les vues d'information de schéma sont normalisée (SQL:1992) et leur structure ne varie pas d'une version à l'autre.
Donc :
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE CATALOG_NAME = 'PUBSI') ...
Autre chose : ce que t'as donné bruno : IF EXISTS (SELECT * FROM MASTER.DBO.SYSDATABASES WHERE NAME = 'PUBSI') Est susceptible de ne pas fonctionner si le serveur a été installé avec une collation forte. En effet il faut faire : IF EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = 'PUBSI') ... car les noms des objets MS SQL Server sont la plupart du temps en minuscule
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Dge a écrit:
Bonjour à tous,
Je cherche à verifier l'existance d'une base sur un serveur. Si elle existe je fais un truc sinon un autre.
Le soucis c'est qu'en faisant :
USE base Select * from table
si la base n'existe pas, une erreur est générée.
Il me faudrait un truc style
If exists (USE table) ...
Et cela est impossible.
Quelqu'un a t il une idée ?
Merci par avance
Dge
Dge
Merci encore pour vos reponses super rapides et tres claires.
Dge
Merci encore pour vos reponses super rapides et tres claires.