适用于: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'
将返回其数据库 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
此示例返回 AdventureWorks2022 数据库的数据库 ID。
SELECT DB_ID(N'AdventureWorks2008R2') AS [Database ID];
GO
C. 使用 DB_ID 来指定系统函数参数的值
此示例使用 DB_ID 返回系统函数 AdventureWorks2022 中 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 和 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)