SQL Server 2005语法增强之OBJECT_ID
来源:互联网 发布:javascript难吗 编辑:程序博客网 时间:2024/06/06 01:11
在SQL Server的以前版本中OBJECT_ID只接受一个参数,即对象的名称,在最新的版本中微软对这个内部函数作了功能方面的增强,我们先看看微软MSDN上的描述:
重要提示:
使用 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 的数据类型为 varchar 或 nvarchar。如果 object_name 的数据类型为 varchar,则它将隐式转换为 nvarchar。可以选择是否指定数据库和架构名称。
' object_type '
架构范围的对象类型。object_type 的数据类型为 varchar 或 nvarchar。如果 object_type 的数据类型为 varchar,则它将隐式转换为 nvarchar。有关对象类型的列表,请参阅 sys.objects (Transact-SQL) 中的 type 列。
返回类型
int
异常
出现错误时或调用方没有查看对象的权限时,将返回 NULL。
在 SQL Server 2005 中,用户只能查看其拥有的安全对象的元数据,或者已对其授予权限的安全对象的元数据。也就是说,如果用户对该对象没有任何权限,则某些会产生元数据的内置函数(如 OBJECT_ID)可能返回 NULL。有关详细信息,请参阅元数据可见性配置和元数据可见性故障排除。
备注
当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。
当指定临时表名时,除非当前数据库为 tempdb,否则必须在该临时表名之前加上数据库名称。例如:SELECT OBJECT_ID('tempdb..#mytemptable')。
系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关详细信息,请参阅表达式(Transact-SQL)和 WHERE (Transact-SQL)。
示例
A. 返回指定对象的对象 ID
以下示例返回 AdventureWorks 数据库中 Production.WorkOrder 表的对象 ID。
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks.Production.WorkOrder') AS 'Object ID';
GO
B. 验证对象是否存在
以下示例通过验证表是否具有对象 ID 来检查指定表的存在性。如果该表存在,则将其删除。如果该表不存在,则不执行 DROP TABLE 语句。
USE AdventureWorks;
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 函数返回 AdventureWorks 数据库中 Person.Address 表的所有索引和分区信息。
重要提示:
在使用 Transact-SQL 函数 DB_ID 和 OBJECT_ID 返回参数值时,请始终确保返回有效的 ID。如果找不到数据库或对象的名称,例如相应名称不存在或拼写不正确SQL Server2005 功能,则两个函数都会返回 NULL。sys.dm_db_index_operational_stats 函数将 NULL 解释为指定所有数据库或所有对象的通配符值。由于这可能是无心之举,所以此部分举例说明了确定数据库 ID 和对象 ID 的安全方法。
DECLARE @db_id smallint;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.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
Object_Type列表:
TypeDescriptionAF = Aggregate function (CLR)AGGREGATE_FUNCTIONC = CHECK constraintCHECK_CONSTRAINTD = DEFAULT (constraint or stand-alone)DEFAULT_CONSTRAINTF = FOREIGN KEY constraintFOREIGN_KEY_CONSTRAINTPK = PRIMARY KEY constraintPRIMARY_KEY_CONSTRAINTP = SQL stored procedureSQL_STORED_PROCEDUREPC = Assembly (CLR) stored procedureCLR_STORED_PROCEDUREFN = SQL scalar functionSQL_SCALAR_FUNCTIONFS = Assembly (CLR) scalar functionCLR_SCALAR_FUNCTIONFT = Assembly (CLR) table-valued functionCLR_TABLE_VALUED_FUNCTIONR = Rule (old-style, stand-alone)RULERF = Replication-filter-procedureREPLICATION_FILTER_PROCEDURES = System base tableSYSTEM_TABLESN = SynonymSYNONYMSQ = Service queueSERVICE_QUEUETA = Assembly (CLR) DML triggerCLR_TRIGGERTR = SQL DML triggerSQL_TRIGGERIF = SQL inline table-valued functionSQL_INLINE_TABLE_VALUED_FUNCTIONTF = SQL table-valued-functionSQL_TABLE_VALUED_FUNCTIONU = Table (user-defined)USER_TABLEUQ = UNIQUE constraintUNIQUE_CONSTRAINTV = ViewVIEWX = Extended stored procedureEXTENDED_STORED_PROCEDUREIT = Internal tableINTERNAL_TABLE所以对于以下的SQL:
IFOBJECTPROPERTY(OBJECT_ID(N'dbo.Company'), N'IsUserTable') = 1
DROPTABLE dbo.Company
GO
之类的,通常在SQL Server 2005可以考虑写成:
IFOBJECT_ID(N'dbo.Company')SQL Server2005 功能, 'U') ISNOTNULL
DROPTABLE dbo.Company
GO
- SQL Server 2005语法增强之OBJECT_ID
- SQL Server 2005语法增强之OBJECT_ID
- SQL Server 2005语法增强之OBJECT_ID
- Transact-SQL OBJECT_ID语法
- SQL Server OBJECT_ID() 函数
- SQL Server OBJECT_ID() 函数
- SQL SERVER 中的 object_id()函数
- sql server 中使用OBJECT_ID 总结
- SQL Server 2005 安全性增强
- SQL Server 2005中的T-SQL增强
- SQL Server 2005中的T-SQL增强
- SQL Server 2005 T-SQL增强
- SQL Server 2005中的T-SQL增强
- SQL Server 2005中的T-SQL增强
- SQL Server 2005中的T-SQL增强
- SQL Server 2005中的T-SQL增强
- SQL Server 2005中的T-SQL增强
- sql server 2005 T-Sql 增强
- SQL Server中的sp_executesql系统存储过程
- QT中QmessageBox bug的修复
- 运用Detours库hook API
- Tclientdataset合并修改日志--MergeChangeLog
- 浅析ASP.NET的Page.IsPostBack 属性
- SQL Server 2005语法增强之OBJECT_ID
- Bypass warning message when sending email from AX
- hdu1715
- 嵌入式Linux系统中的快速启动技术研究
- 《二十几岁为什么是人生的一道坎》激励自己。。。。。。。。
- 數據庫字符集
- 泛型
- vs2005exe工程生成exp及lib文件的问题
- RDLC报表(五)