SQL create database si n'existe pas, les comportements inattendus

J'ai une longue procédure stockée qui commence avec la déclaration suivante:

IF  NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME')
    BEGIN
        CREATE DATABASE [DBNAME]
    END;

Il est prévu de créer la DB sur mon serveur local, si elle n'existe pas. Le problème, c'est que presque toutes les fois qu'elle passe par cette partie de la procédure stockée et ne pas le créer, ce qui interfère alors avec l'autre code à partir de la même procédure. D'autre part, dans de très rares cas, il crée la DB. Ma question est: Est-il une meilleure façon de vérifier si le DB existe, parce que j'ai déjà essayé au moins 10.

D'autres moyens, j'ai essayé:

IF  NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = N'DBNAME')
    BEGIN
        CREATE DATABASE [DBNAME]
    END;

IF  NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'DBNAME')
        BEGIN
            CREATE DATABASE [DBNAME]
        END;

IF  NOT EXISTS (SELECT name FROM master.dbo.sys.databases WHERE name = N'DBNAME')
            BEGIN
                CREATE DATABASE [DBNAME]
        END;

Mais si je le lance en dehors de ma sp, il fonctionne parfaitement, ce qui me fait penser qu'il peut y avoir certains problèmes liés à des autorisations.

If not EXISTS (SELECT * from sys.les bases de données OÙ nom = N'DBNAME') est déjà en 2014 et montrant résultat correct. En êtes-vous des erreurs ?
avez-vous utilisé un roll back dans le cadre de l'ur proc ..si oui, alors vérifier qu'il n'est pas annulée..
Non, je seulement obtenir la Base de données 'DBNAME' n'existe pas, quand j'essaye de l'utiliser dans la procédure stockée par la suite. Je ne suis pas à l'aide d'une transaction.
Si vous utilisez Transaction, assurez-vous que vous commit.
Documentation MSDN devrait vous aider!

OriginalL'auteur StefanL19 | 2016-11-28