web-dev-qa-db-fra.com

Comment vérifier si une base de données existe dans SQL Server?

Quel est le moyen idéal pour vérifier si une base de données existe sur un serveur SQL utilisant TSQL? Il semble y avoir plusieurs approches pour mettre cela en œuvre.

225
Ray Vega

À partir d'un script de Microsoft:

DECLARE @dbname nvarchar(128)
SET @dbname = N'Senna'

IF (EXISTS (SELECT name 
FROM master.dbo.sysdatabases 
WHERE ('[' + name + ']' = @dbname 
OR name = @dbname)))

-- code mine :)
PRINT 'db exists'
140
eKek0

En fait, il vaut mieux utiliser:

IF DB_ID('dms') IS NOT NULL
   --code mine :)
   print 'db exists'

Voir https://docs.Microsoft.com/en-us/sql/t-sql/functions/db-id-transact-sql

457
Eduardo
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'YourDatabaseName')
  Do your thing...

En passant, cela provient directement de SQL Server Studio. Par conséquent, si vous avez accès à cet outil, je vous recommande de commencer à jouer avec les différentes fonctions "Script xxxx AS" disponibles. Va vous rendre la vie plus facile! :)

33
si618

J'aime la réponse de @ Eduardo et j'ai bien aimé la réponse acceptée. J'aime récupérer un booléen de quelque chose comme ça, alors je l'ai écrit pour vous.

CREATE FUNCTION dbo.DatabaseExists(@dbname nvarchar(128))
RETURNS bit
AS
BEGIN
    declare @result bit = 0 
    SELECT @result = CAST(
        CASE WHEN db_id(@dbname) is not null THEN 1 
        ELSE 0 
        END 
    AS BIT)
    return @result
END
GO

Maintenant, vous pouvez l'utiliser comme ceci:

select [dbo].[DatabaseExists]('master') --returns 1
select [dbo].[DatabaseExists]('slave') --returns 0
4
Don Rolling

Une autre méthode consiste à utiliser SqlDataReader avec SqlConnection et SqlCommand. Utilisez la propriété HasRows. C'est true si la base de données existe et false si ce n'est pas le cas.

Exemple (dans cet exemple, le nom de la base de données est "Matches"):

    string CreateDatabaseConnectionString="/*the connection string*/";

    public static bool DatabaseExists()
    {
        bool Count;
        string DatabaseCheckString = "select name from master.sys.databases where name='Matches'";
        SqlConnection MyConn = new SqlConnection(CreateDatabaseConnectionString);
        SqlCommand DatabaseExistsCommand = new SqlCommand(DatabaseCheckString, MyConn);
        MyConn.Open();
        SqlDataReader Reader = DatabaseExistsCommand.ExecuteReader();
        Count = Reader.HasRows;
        MyConn.Close();
        return Count;
    }
0
Bogdan Doicin

ESSAYE ÇA

IF EXISTS 
   (
     SELECT name FROM master.dbo.sysdatabases 
    WHERE name = N'New_Database'
    )
BEGIN
    SELECT 'Database Name already Exist' AS Message
END
ELSE
BEGIN
    CREATE DATABASE [New_Database]
    SELECT 'New Database is Created'
END
0
Kovid Purohit