適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
此函式會傳回指定資料庫的資料庫識別碼 (ID)。
語法
DB_ID ( [ 'database_name' ] )
引數
'database_name'
DB_ID 會傳回其資料庫識別碼的資料庫名稱。 如果 DB_ID 呼叫省略 database_name,DB_ID 會傳回目前資料庫的識別碼。
傳回類型
int
備註
DB_ID 只能用來傳回 Azure SQL Database 中目前資料庫的資料庫識別碼。 如果指定的資料庫名稱不是目前資料庫的名稱,就會傳回 NULL。
注意
在 Azure SQL 資料庫 中,DB_ID可能不會傳回與 sys.databases 和 database_id 中的數據行相同的值。 這兩個檢視會傳回database_id邏輯伺服器內唯一的值,而DB_IDdatabase_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. 傳回指定資料庫的資料庫識別碼
此範例會傳回 AdventureWorks2025 資料庫的資料庫識別碼。
SELECT DB_ID(N'AdventureWorks2008R2') AS [Database ID];
GO
C. 使用 DB_ID 來指定系統函數參數的值
此範例會使用 DB_ID 來傳回系統函式 AdventureWorks2025 中 sys.dm_db_index_operational_stats 資料庫的資料庫識別碼。 該函數是以資料庫識別碼作為第一個參數。
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)