Как проверить, существует ли база данных в SQL Server? - PullRequest
235 голосов
/ 24 марта 2009

Каков идеальный способ проверить, существует ли база данных на SQL Server с использованием TSQL? Кажется, несколько подходов для реализации этого.

Ответы [ 6 ]

476 голосов
/ 08 января 2010

На самом деле лучше всего использовать:

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

См. https://docs.microsoft.com/en-us/sql/t-sql/functions/db-id-transact-sql

143 голосов
/ 24 марта 2009

Из скрипта 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'
33 голосов
/ 24 марта 2009
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'YourDatabaseName')
  Do your thing...

Кстати, это пришло непосредственно из SQL Server Studio, поэтому, если у вас есть доступ к этому инструменту, я рекомендую вам начать играть с различными доступными функциями «Script xxxx AS». Сделает вашу жизнь проще! :)

5 голосов
/ 14 декабря 2016

Мне нравится ответ @ Эдуардо, и мне понравился принятый ответ. Мне нравится возвращать логическое значение от чего-то подобного, поэтому я написал это для вас, ребята.

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

Теперь вы можете использовать его так:

select [dbo].[DatabaseExists]('master') --returns 1
select [dbo].[DatabaseExists]('slave') --returns 0
0 голосов
/ 03 июня 2019

Другой способ - использовать SqlDataReader вместе с SqlConnection и SqlCommand. Используйте свойство HasRows. Это true, если база данных существует, и false, если это не так.

Пример (в данном примере имя базы данных равно «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 голосов
/ 09 мая 2018

ПОПРОБУЙТЕ

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...