SQL Server에 데이터베이스가 있는지 확인하는 방법


271

TSQL을 사용하여 데이터베이스가 SQL Server에 있는지 확인하는 이상적인 방법은 무엇입니까? 이것을 구현하는 방법은 여러 가지가 있습니다.

답변:


165

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'

7
Microsoft 스크립트에서 가져온 것일 수 있지만 Microsoft 권장 방법은 아닙니다. 시스템 테이블에 직접 액세스하지 않고 INFORMATION_SCHEMA 뷰를 사용하는 것이 좋습니다.
mwigdahl

4
테이블에 대한 참조를 직접 사용하는 대신 INFORMATION_SCHEMA를 사용하도록 권장하는 이유는 무엇입니까?
eKek0

4
일반적으로 Microsoft는 INFORMATION_SCHEMA 형식으로 커밋하고 시스템 테이블을 원하는대로 변경할 수있는 권한을 보유하기 때문입니다. 그러나이 경우, 자세히 살펴본 후에 INFORMATION_SCHEMA가 작동하지 않으므로 이것이 가장 좋은 옵션 일 것입니다.
mwigdahl

3
INFORMATION_SCHEMA가 데이터베이스 내부의 개체를 검사하는 데 선호된다는 데 동의합니다. 그러나 INFORMATION_SCHEMA를 사용하여 db 자체를 확인할 수 있습니까? <<<<< ............... CHECK_CONSTRAINTS 점검 제한 조건 COLUMN_DOMAIN_USAGE 사용자 정의 데이터 유형이있는 모든 열. COLUMN_PRIVILEGES 현재 데이터베이스의 현재 사용자에게 또는 현재 사용자가 부여한 권한이있는 모든 열. COLUMNS 시스템의 모든 열을 나열합니다. CONSTRAINT_COLUMN_USAGE 제약 조건이 정의 된 모든 열. CONSTRAINT_TABLE_USAGE 제약 조건이 정의 된 모든 테이블.
granadaCoder

2
@mwigdahl-이 권장 권장 사례에 대한 참조를 제공하십시오.
Martin Smith

526

실제로 사용하는 것이 가장 좋습니다 :

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을 참조 하십시오.


3
확실히 더 짧고 더 비밀 스럽습니다. 호기심 때문에 왜 더 낫습니까?
Mike K

7
아마도 db_id가 특정 위치에서 데이터베이스 이름을 확인하는 것보다 안전하기 때문에[master]
Anthony

4
db_id가 숫자를 쿼리하기 때문에 db_id ()가 허용 된 답변보다 더 나쁘거나 (같은 복잡성 / 비용 일 수 있음) 거의 불가능합니다. 따라서 데이터베이스 개발자가 수행 한 db_id ()가 더 똑똑한 방식으로 구현되고 있다고 생각합니다.
Eduardo Eduardo

3
[마스터]에 액세스 할 수있는 권한이없는 것처럼 권한 문제가있는 경우이 방법이 효과적입니다!
Jason Foglia

2
@ MadTigger : 당신은 [ ]당신의 전화에 포함해서는 안됩니다 db_id; 이는 데이터베이스 이름의 일부가 아닌 SQL 구문입니다.
Jacob Krall

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

그건 그렇고, 이것은 SQL Server Studio에서 직접 제공 되었으므로이 도구에 액세스 할 수 있다면 사용 가능한 다양한 "Script xxxx AS"기능을 사용하여 시작하는 것이 좋습니다. 당신의 인생을 더 쉽게 만들 것입니다! :)


3
'사용 [마스터]'불편한 경우, 직접 'master.sys.databases'로 데이터베이스에서보기보기를 해결할 수
ProfK

8

나는 @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

2

이 시도

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.