OBJECT_ID (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
返回架构范围内对象的数据库对象标识号。
不能使用 OBJECT_ID
查询非架构范围的对象,例如数据定义语言 (DDL) 触发器。 对于在 sys.objects 目录视图中找不到的对象,请通过查询相应的目录视图来获取对象标识号。 例如,若要返回 DDL 触发器的对象标识号,请使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'
。
语法
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 或 nvarchar。 object_name的 varchar 值将隐式转换为 nvarchar。 可以选择是否指定数据库和架构名称。
N'object_type'
架构范围的对象类型。 object_type 为 varchar 或 nvarchar。 object_type的 varchar 值将隐式转换为 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)。
示例
本文中的 Transact-SQL 代码示例使用 AdventureWorks2022
或 AdventureWorksDW2022
示例数据库,可从 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_ID
并 OBJECT_ID
返回参数值时,请始终确保返回有效的 ID。 如果找不到数据库或对象名称,例如当数据库或对象名称不存在或拼写错误时,这两个函数都会返回 NULL
。 该 sys.dm_db_index_operational_stats
函数解释 NULL
为指定所有数据库或所有对象的通配符值。 由于此操作可能是无意中的,因此本部分中的示例演示了确定数据库和对象 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';