web-dev-qa-db-ja.com

SQL Serverにデータベースが存在するかどうかを確認する方法

TSQLを使用してSQL Server上にデータベースが存在するかどうかを確認するための理想的な方法は何ですか?これを実装するには複数の方法があります。

237
Ray Vega

マイクロソフトのスクリプトから:

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'
145
eKek0

実際にはそれを使うのが一番です:

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

https://docs.Microsoft.com/ja-jp/sql/t-sql/functions/db-id-transact-sql を参照してください。

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

ところで、これはSQL Server Studioから直接来たので、このツールにアクセスできるのであれば、利用可能なさまざまな "Script xxxx AS"機能を試してみることをお勧めします。あなたの人生を楽にします! :)

33
si618

私は@ Eduardoの回答が好きで、受け入れられた回答が好きでした。私はこのようなものからブール値を取り戻すのが好きです、それで私はあなたのためにそれを書きました。

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
5
Don Rolling

別の方法は、SqlDataReadername__およびSqlConnectionname__とともにSqlCommandname__を使用することです。 HasRowsname__プロパティを使用してください。データベースが存在する場合はtruename__、存在しない場合はfalsename__です。

例(この例では、データベース名は "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

試してみる

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