OBJECT_ID (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

返回架构范围内对象的数据库对象标识号。

不能使用 OBJECT_ID 查询非架构范围的对象,例如数据定义语言 (DDL) 触发器。 对于在 sys.objects 目录视图中找不到的对象,请通过查询相应的目录视图来获取对象标识号。 例如,若要返回 DDL 触发器的对象标识号,请使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'

Transact-SQL 语法约定

语法

OBJECT_ID ( ' [ database_name . [ schema_name ] . | schema_name . ]
  object_name' [ , 'object_type' ] )

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

N'object_name'

要使用的对象。 object_name 为 varchar 或 nvarcharobject_namevarchar 值将隐式转换为 nvarchar。 可以选择是否指定数据库和架构名称。

N'object_type'

架构范围的对象类型。 object_type 为 varchar 或 nvarcharobject_typevarchar 值将隐式转换为 nvarchar。 有关对象类型的列表,请参阅 sys.objects (Transact-SQL) 中的 type 列。

返回类型

int

异常

对于空间索引, OBJECT_ID 返回 NULL

返回 NULL 错误。

用户只能查看用户拥有的安全对象的元数据,也可以查看向其授予权限的安全对象。 这意味着,如果用户对对象没有任何权限,则可能会返回NULL元数据发出的内置函数OBJECT_ID。 有关详细信息,请参阅 Metadata Visibility Configuration

注解

当该参数对系统函数可选时,则采用当前数据库、主机、服务器用户或数据库用户。 必须始终使用括号关注内置函数。

指定临时表名时,除非当前数据库是 tempdb,否则数据库名称必须位于临时表名之前。 例如:

SELECT OBJECT_ID('tempdb..#mytemptable');

可以在 select 列表、子句和 WHERE 允许表达式的任何位置使用系统函数。 有关详细信息,请参阅表达式 (Transact-SQL)WHERE (Transact-SQL)

示例

本文需要 AdventureWorks2022 示例数据库,其可从 Microsoft SQL Server 示例和社区项目主页下载。

A. 返回指定对象的对象 ID

以下示例返回 AdventureWorks2022 数据库中 Production.WorkOrder 表的对象 ID。

USE master;
GO

SELECT OBJECT_ID(N'AdventureWorks2022.Production.WorkOrder') AS 'Object ID';
GO

B. 验证对象是否存在

以下示例通过验证表是否具有对象 ID 来检查指定表的存在性。 如果该表存在,则将其删除。 如果该表不存在, DROP TABLE 则不会执行该语句。

USE AdventureWorks2022;
GO

IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO

°C 使用OBJECT_ID指定系统函数参数的值

以下示例使用 sys.dm_db_index_operational_stats 函数返回 AdventureWorks2022 数据库中 Person.Address 表的所有索引和分区信息。

注意

Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

使用 Transact-SQL 函数 DB_IDOBJECT_ID 返回参数值时,请始终确保返回有效的 ID。 如果找不到数据库或对象名称,例如当数据库或对象名称不存在或拼写错误时,这两个函数都会返回 NULL。 该sys.dm_db_index_operational_stats函数解释NULL为指定所有数据库或所有对象的 wild卡 值。 由于此操作可能是无意中的,因此本部分中的示例演示了确定数据库和对象 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

以下示例返回 AdventureWorksPDW2022 数据库中 FactFinance 表的对象 ID。

SELECT OBJECT_ID('AdventureWorksPDW2012.dbo.FactFinance') AS 'Object ID';