129 votes

Comment requête si un schéma de base de données existe

Dans le cadre de notre processus de fabrication nous exécuter un script de mise à jour de la base de données que nous déployer le code à 4 environnements différents (en raison de fou règles métier, mais c'est un autre post). En outre, depuis la même requête sera ajouté à jusqu'à ce que nous déposer une version en production (encore un peu plus de domaines à ajouter à... frustrant); il doit être capable d'exécuter plusieurs fois sur une même base de données. Comme ceci:

IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = OBJECT_ID(N'[Table]'))
BEGIN
  CREATE TABLE [Table]
  (...)
END

Actuellement, j'ai une instruction create schema dans le déploiement/script de construction. Où dois-je la requête de l'existence d'un schéma?

211voto

bdukes Points 54833

Vous êtes à la recherche pour sys.les schémas?

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'jim')
BEGIN
CREATE SCHEMA jim ...
END

169voto

vfilby Points 5975

bdukes est à droite sur l'argent pour déterminer si le schéma existe, mais la déclaration ci-dessus ne fonctionne pas dans SQL Server 2005. CRÉER le SCHÉMA doit exécuter dans son propre lot. Un travail est d'exécuter l'instruction CREATE SCHEMA dans un exec.

Voici ce que j'ai utilisé dans mes scripts de compilation:

IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = '<name>')
BEGIN
    -- The schema must be run in its own batch!
    EXEC( 'CREATE SCHEMA <name>' );
END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X