SQL Server : 데이터베이스가 시스템 데이터베이스인지 알리는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1819095

문제

지금까지 (MSSQL 2005까지) 시스템 데이터베이스는 마스터, 모델, MSDB 및 TEMPDB임을 알고 있습니다.

내가 알 수있는 한, 이것은 미래에 보존되지 않는다는 것입니다. 그리고 sys.database view 나 sys.sysdatabase view는 데이터베이스가 시스템 데이터베이스로 간주되는지 알려줍니다.

이 정보 (데이터베이스가 시스템 데이터베이스로 간주되는지 여부)를 얻을 수있는 곳이 있습니까?

도움이 되었습니까?

해결책

그냥 뛰어 들었습니다 Microsoft.SqlServer.Management.Smo.Database 객체 (Microsoft 자체가 제공하는 것!)는 다음과 같은 명령문을 사용하여 간단히 수행합니다.

CAST(case when dtb.name in ('master','model','msdb','tempdb') 
   then 1 
   else dtb.is_distributor end AS bit) AS [IsSystemObject]

간단히 말해서 : 데이터베이스의 이름이 지정된 경우 master, model, msdb 또는 tempdb, 그것은 시스템 DB입니다. 또한 필드 인 경우 시스템 DB입니다 is_distributor = 1 관점에서 sys.databases.

도움이 되었기를 바랍니다

조립식 쇠지레

다른 팁

db_id () 함수 <= 4에 의존 할 수 있습니다.

이것을 바꾸기 위해 열심히 노력해야 할 것입니다 ...

SQL Server Management Studio는 이것을 사용합니다

"객체 탐색기"에서 "시스템 데이터베이스"를 확장하면 (Wireshark에서 볼 수 있음) :

SELECT dtb.name AS [Database_Name]
FROM master.sys.databases AS dtb
WHERE (CAST(case when dtb.name in ('master','model','msdb','tempdb') then 1 else dtb.is_distributor end AS bit)=1)

단순성을 위해 관련없는 열을 제거하고, orderby를 제거하고 @_msparam_0 변수를 값으로 대체했습니다 1

소유자 _sid는 시스템 데이터베이스의 경우 0x01과 같습니다. 따라서 데이터베이스가 시스템 DB인지 여부를 인식하는 데 사용할 수 있습니다.

select * from sys.databases
where owner_sid != 0x01

그러한 옵션 Afaik은 없습니다. id를 sys.databases.owner_sid = 0x01로 확인할 수 있다고 생각합니다.

MS 시스템 DB 이름을 변경하는 것에 대해 걱정할 필요가 없다고 생각합니다. 그들이 널리 퍼져 있다면 당신은 적어도 20 년 동안 그것에 대해 걱정할 필요가 없습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top