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'
将返回其数据库 ID 号 DB_ID 的数据库的名称。 如果对 DB_ID 的调用省略 database_name,则 DB_ID 返回当前数据库的 ID。

返回类型

int

备注

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

注意

在 Azure SQL 数据库中,DB_ID 不能返回与 sys.databases 和 sys.database_service_objectives 中的 database_id 列相同的值。 这两个视图返回在逻辑服务器中唯一的 database_id 值,而其他系统视图中的 DB_IDdatabase_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. 返回当前数据库的数据库 ID

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

SELECT DB_ID() AS [Database ID];  
GO  

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

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

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

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

此示例使用 DB_ID 返回系统函数 sys.dm_db_index_operational_statsAdventureWorks2022 数据库的数据库 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 和 Analytics Platform System (PDW)

D. 返回当前数据库的 ID

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

SELECT DB_ID();  

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

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

SELECT DB_ID('AdventureWorksPDW2012');  

另请参阅

DB_NAME (Transact-SQL)
元数据函数 (Transact-SQL)
sys.databases (Transact-SQL)
sys.dm_db_index_operational_stats (Transact-SQL)