DB_ID (Transact-SQL)
適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics Platform System (PDW)
此函式會傳回指定資料庫的資料庫識別碼 (ID)。
Syntax
DB_ID ( [ 'database_name' ] )
注意
若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件。
引數
'database_name'
DB_ID
會傳回其資料庫識別碼的資料庫名稱。 如果 DB_ID
呼叫省略 database_name,DB_ID
會傳回目前資料庫的識別碼。
傳回類型
int
備註
DB_ID
只能用來傳回 Azure SQL Database 中目前資料庫的資料庫識別碼。 如果指定的資料庫名稱不是目前資料庫的名稱,就會傳回 NULL。
注意
在 Azure SQL 資料庫 中,DB_ID
可能不會傳回與 sys.databases 和 sys.database_service_objectives 中的數據行相同的值database_id
。 這兩個檢視會傳回database_id
邏輯伺服器內唯一的值,而database_id
DB_ID
其他系統檢視中的數據行則傳回在單一資料庫或彈性集區內唯一的值。
權限
如果 DB_ID
的呼叫端未擁有特定非 master 或非 tempdb 資料庫,至少需要 ALTER ANY DATABASE
或 VIEW ANY DATABASE
伺服器層級權限才能查看對應的 DB_ID
資料列。 針對 master 資料庫,DB_ID
至少需要 CREATE DATABASE
權限。 呼叫端所連線的資料庫一律會出現在 sys.databases 中。
重要
根據預設,公用角色具備 VIEW ANY DATABASE
權限,允許所有登入查看資料庫資訊。 若要防止登入偵測資料庫,請 REVOKE
公用 VIEW ANY DATABASE
權限,或 DENY
個別登入的 VIEW ANY DATABASE
權限。
範例
A. 傳回目前資料庫的資料庫識別碼
此範例會傳回目前資料庫的資料庫識別碼。
SELECT DB_ID() AS [Database ID];
GO
B. 傳回指定資料庫的資料庫識別碼
此範例會傳回 AdventureWorks2022
資料庫的資料庫識別碼。
SELECT DB_ID(N'AdventureWorks2008R2') AS [Database ID];
GO
C. 使用 DB_ID 來指定系統函數參數的值
此範例會使用 DB_ID
來傳回系統函式 sys.dm_db_index_operational_stats
中 AdventureWorks2022
資料庫的資料庫識別碼。 該函數是以資料庫識別碼作為第一個參數。
DECLARE @db_id INT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO
範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
D. 傳回目前資料庫的識別碼
此範例會傳回目前資料庫的資料庫識別碼。
SELECT DB_ID();
E. 傳回具名資料庫的識別碼。
此範例會傳回 AdventureWorksDW2022 資料庫的資料庫標識碼。
SELECT DB_ID('AdventureWorksPDW2012');
另請參閱
DB_NAME (Transact-SQL)
中繼資料函數 (Transact-SQL)
sys.databases (Transact-SQL)
sys.dm_db_index_operational_stats (Transact-SQL)