我知道到目前爲止(至少在MSSQL 2005之前),系統數據庫是master,model,msdb和tempdb。SQL Server:如何判斷數據庫是否是系統數據庫?
據我所知,這是不能保證將來保存的。 sys.databases視圖和sys.sysdatabases視圖都不告訴我數據庫是否被視爲系統數據庫。
是否有某個地方可以獲取該信息(無論數據庫是否被認爲是系統數據庫)?
我知道到目前爲止(至少在MSSQL 2005之前),系統數據庫是master,model,msdb和tempdb。SQL Server:如何判斷數據庫是否是系統數據庫?
據我所知,這是不能保證將來保存的。 sys.databases視圖和sys.sysdatabases視圖都不告訴我數據庫是否被視爲系統數據庫。
是否有某個地方可以獲取該信息(無論數據庫是否被認爲是系統數據庫)?
就跳入Microsoft.SqlServer.Management.Smo.Database
對象 他們只是做到這一點使用下面的語句(這是由微軟本身提供!):
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; 它也是一個系統分貝,如果is_distributor = 1
在視圖sys.databases
。
希望這有助於
吉米
不,沒有這樣的選項AFAIK。我想你可以檢查ID sys.databases.owner_sid = 0x01。
我不認爲你必須擔心MS更改系統數據庫名稱。如果他們theat你就不必擔心它至少20年:)
owner_sid等於只是0X01系統數據庫。 因此,您可以使用它來識別數據庫是否是系統數據庫。
select * from sys.databases
where owner_sid != 0x01
這不是一個好主意,因爲它會返回任何由'sa',系統擁有的數據庫。 – 2014-06-16 21:31:15
這不適用於Sql Azure,其中主數據庫的sid不是0x01。 – 2015-09-17 22:16:51
Jimmy抓住了別人錯過的內容。當您啓用複製時,SQL Server將添加一個名爲'distribution'的額外系統數據庫。 – 2012-07-06 20:01:04