分享方式:


DB_ID (Transact-SQL)

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

此函式會傳回指定資料庫的資料庫識別碼 (ID)。

Transact-SQL 語法慣例

語法

DB_ID ( [ 'database_name' ] )   

引數

'database_name'
DB_ID 會傳回其資料庫識別碼的資料庫名稱。 如果 DB_ID 呼叫省略 database_nameDB_ID 會傳回目前資料庫的識別碼。

傳回類型

int

備註

DB_ID 只能用來傳回 Azure SQL Database 中目前資料庫的資料庫識別碼。 如果指定的資料庫名稱不是目前資料庫的名稱,就會傳回 NULL。

注意

在 Azure SQL 資料庫 中,DB_ID可能不會傳回與 sys.databasessys.database_service_objectives 中的數據行相同的值database_id。 這兩個檢視會傳回database_id邏輯伺服器內唯一的值,而database_idDB_ID其他系統檢視中的數據行則傳回在單一資料庫或彈性集區內唯一的值。

權限

如果 DB_ID 的呼叫端未擁有特定非 master 或非 tempdb 資料庫,至少需要 ALTER ANY DATABASEVIEW 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_statsAdventureWorks2022 資料庫的資料庫識別碼。 該函數是以資料庫識別碼作為第一個參數。

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)