OBJECT_ID()---返回架構(gòu)范圍內(nèi)對(duì)象的數(shù)據(jù)庫(kù)對(duì)象標(biāo)識(shí)號(hào) 語(yǔ)法: OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]
object_name' [
,'object_type' ] ) 參數(shù): ' object_name ' 要使用的對(duì)象。object_name 的數(shù)據(jù)類(lèi)型為 varchar 或 nvarchar。 如果 object_name 的數(shù)據(jù)類(lèi)型為 varchar,則它將隱式轉(zhuǎn)換為 nvarchar。 可以選擇是否指定數(shù)據(jù)庫(kù)和架構(gòu)名稱。 ' object_type ' 架構(gòu)范圍的對(duì)象類(lèi)型。object_type 的數(shù)據(jù)類(lèi)型為 varchar 或 nvarchar。 如果 object_type 的數(shù)據(jù)類(lèi)型為 varchar,則它將隱式轉(zhuǎn)換為 nvarchar。 有關(guān)對(duì)象類(lèi)型的列表,請(qǐng)參閱 sys.objects
(Transact-SQL) 中的 type 列。 返回類(lèi)型 int 對(duì)于空間索引,OBJECT_ID 返回 NULL。 出現(xiàn)錯(cuò)誤時(shí),返回 NULL。 用戶只能查看其擁有的安全對(duì)象的元數(shù)據(jù),或者已對(duì)其授予權(quán)限的安全對(duì) 象的元數(shù)據(jù)。也就是說(shuō),如果用戶對(duì)該對(duì)象沒(méi)有任何權(quán)限,則那些會(huì)生成元數(shù)據(jù)的內(nèi)置函數(shù)(如 OBJECT_ID)可能返回 NULL。有關(guān)詳細(xì)信息,請(qǐng)參閱元數(shù)據(jù)可見(jiàn)性配置和元數(shù)據(jù)可見(jiàn)性故障排除。 當(dāng)該參數(shù)對(duì)系統(tǒng)函數(shù)可選時(shí),則采用當(dāng)前數(shù)據(jù)庫(kù)、主機(jī)、服務(wù)器用戶或數(shù) 據(jù)庫(kù)用戶。內(nèi)置函數(shù)后面必須跟括號(hào)。 當(dāng)指定臨時(shí)表名時(shí),除非當(dāng)前數(shù)據(jù)庫(kù)為 tempdb, 否則必須在該臨時(shí)表名之前加上數(shù)據(jù)庫(kù)名稱。例如:SELECT OBJECT_ID('tempdb..#mytemptable')。 系統(tǒng)函數(shù)可以在選擇列表、WHERE 子句和任何允許使用表達(dá)式的地方使用。有關(guān)詳細(xì)信息,請(qǐng)參閱表達(dá)式 (Transact-SQL)和 WHERE (Transact-SQL)。 A. 返回指定對(duì)象的對(duì)象 ID以下示例返回 AdventureWorks2008R2 數(shù)據(jù)庫(kù)中 Production.WorkOrder 表的對(duì)象 ID。 USE master; GO SELECT OBJECT_ID(N'AdventureWorks2008R2.Production.WorkOrder') AS 'Object ID'; GO B. 驗(yàn)證對(duì)象是否存在以下示例通過(guò)驗(yàn)證表是否具有對(duì)象 ID 來(lái)檢查指定表的存在性。如果該表存在,則將其刪除。如果該表不存在,則不執(zhí)行 DROP TABLE 語(yǔ)句。 USE AdventureWorks2008R2; GO IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL DROP TABLE dbo.AWBuildVersion; GO C. 使用 OBJECT_ID 指定系統(tǒng)函數(shù)的參數(shù)值以下示例使用 sys.dm_db_index_operational_stats 函數(shù)返回 AdventureWorks2008R2 數(shù)據(jù)庫(kù)中 Person.Address 表的所有索引和分區(qū)信息。
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
判斷數(shù)據(jù)庫(kù)對(duì)象是否存在 if object_id(N'對(duì)象名',N'對(duì)象類(lèi)型') is not
null 執(zhí)行語(yǔ)句 可選對(duì)象類(lèi)型: AF = 聚合函數(shù) (CLR) C = CHECK 約束 D = DEFAULT(約束或獨(dú)立) F = FOREIGN KEY
約束 FN = SQL 標(biāo)量函數(shù) FS = 程序集 (CLR) 標(biāo)量函數(shù) FT = 程序集 (CLR) 表值函數(shù) IF = SQL 內(nèi)聯(lián)表值函數(shù) IT = 內(nèi)部表 P = SQL 存儲(chǔ)過(guò)程 PC = 程序集 (CLR) 存儲(chǔ)過(guò)程 PG = 計(jì)劃指南 PK = PRIMARY
KEY 約束 R = 規(guī)則(舊式,獨(dú)立) RF = 復(fù)制篩選過(guò)程 S = 系統(tǒng)基表 SN = 同義詞 SQ = 服務(wù)隊(duì)列 TA = 程序集 (CLR) DML 觸發(fā)器 TF = SQL 表值函數(shù) TR = SQL DML 觸發(fā)器 U = 表(用戶定義類(lèi)型) UQ = UNIQUE 約束 V = 視圖 X = 擴(kuò)展存儲(chǔ)過(guò)程 例子 刪除用戶表 if object_id(N'表名',N'U') is not
null drop table 表名 刪除存儲(chǔ)過(guò)程 if object_id(N'存儲(chǔ)過(guò)程名',N'P') is not null drop procedure 存儲(chǔ)過(guò)程名 |
|