DB_ID(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric中的SQL分析端点Microsoft Fabric中的仓库Microsoft Fabric中的SQL数据库

此函数返回指定数据库的数据库标识 (ID) 号。

Transact-SQL 语法约定

语法

DB_ID ( [ 'database_name' ] )   

参数

'database_name'
将返回其数据库 ID 号 DB_ID 的数据库的名称。 如果对 DB_ID 的调用省略 database_name,则 返回当前数据库的 ID。

返回类型

int

备注

DB_ID 仅可用于返回 Azure SQL 数据库中当前数据库的数据库标识符。 如果指定的数据库名称不是当前数据库,则返回 NULL。

注意

在 Azure SQL 数据库中,DB_ID 不能返回与 sys.databases 和 sys.database_service_objectives 中的 database_id 列相同的值。 这两个视图返回在逻辑服务器中唯一的 database_id 值,而其他系统视图中的 DB_ID 和 database_id 列则返回在单个数据库或弹性池中唯一的值。

权限

如果 DB_ID 的调用方不具有特定的非 master 或非 tempdb 数据库,则至少需要 或 服务器级权限才能看到相应的 ALTER ANY DATABASE 行VIEW ANY DATABASEDB_ID。 对于 master 数据库, 至少需要 DB_ID 权限CREATE DATABASE。 调用方连接的数据库将始终出现在 sys.databases 中。

重要

默认情况下,公共角色具有 VIEW ANY DATABASE 权限,允许所有登录名查看数据库信息。 若要防止登录名检测数据库,则需 REVOKE 公共登录名的 VIEW ANY DATABASE 权限或 DENY 个人登录名的 VIEW ANY DATABASE 权限。

示例

A. 返回当前数据库的数据库 ID

此示例返回当前数据库的数据库 ID。

SELECT DB_ID() AS [Database ID];  
GO  

B. 返回指定数据库的数据库 ID

此示例返回 AdventureWorks2025 数据库的数据库 ID。

SELECT DB_ID(N'AdventureWorks2008R2') AS [Database ID];  
GO  

C. 使用 DB_ID 来指定系统函数参数的值

此示例使用 DB_ID 返回系统函数 AdventureWorks2025 中 sys.dm_db_index_operational_stats 数据库的数据库 ID。 此函数将数据库 ID 作为第一个参数。

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

D. 返回当前数据库的 ID

此示例返回当前数据库的数据库 ID。

SELECT DB_ID();  

E. 返回命名数据库的 ID。

此示例返回 AdventureWorksDW2022 数据库的数据库 ID。

SELECT DB_ID('AdventureWorksPDW2012');