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 语法,请参阅早期版本文档

参数

' object_name '
要使用的对象。 object_name 为 varchar 或 nvarchar。 如果 object_name 为 varchar,则它会隐式转换为 nvarchar。 可以选择是否指定数据库和架构名称。

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

返回类型

int

例外

对于空间索引,OBJECT_ID 返回 NULL。

出现错误时,返回 NULL。

用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。 也就是说,如果用户对该对象没有任何权限,则那些会生成元数据的内置函数(如 OBJECT_ID)可能返回 NULL。 有关详细信息,请参阅 Metadata Visibility Configuration

注解

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

当指定临时表名时,除非当前数据库为 tempdb,否则必须在该临时表名之前加上数据库名称。 例如:SELECT OBJECT_ID('tempdb..#mytemptable')

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

示例

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_ID 和 OBJECT_ID 返回参数值时,请始终确保返回有效的 ID。 如果找不到数据库或对象的名称,例如相应名称不存在或拼写不正确,则两个函数都会返回 NULL。 sys.dm_db_index_operational_stats 函数将 NULL 解释为指定所有数据库或所有对象的通配符值。 由于这可能是无心之举,所以此部分中的示例说明了确定数据库 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

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

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

另请参阅

元数据函数 (Transact-SQL)
sys.objects (Transact-SQL)
sys.dm_db_index_operational_stats (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_NAME (Transact-SQL)