【转】返回架构范围内对象的数据库对象标识号——OBJECT_ID (Transact-SQL)

【转自 MSDN : http://msdn.microsoft.com/zh-cn/library/ms190328.aspx

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

 

重要提示:

 

使用 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' ] )

 

 

参数

' object_name '

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

' object_type '

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

返回类型

     int

 

 

注释

 

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

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

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

 

示例

A. 返回指定对象的对象 ID (以下示例返回 AdventureWorks2008R2 数据库中 Production.WorkOrder 表的对象 ID。)

USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks2008R2.Production.WorkOrder') AS 'Object ID';
GO

 

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

USE AdventureWorks2008R2;
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 函数返回 AdventureWorks2008R2 数据库中 Person.Address 表的所有索引和分区信息。)

 

重要提示:

在使用 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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值