SQL Server OBJECTPROPERTY使用方法


OBJECTPROPERTY 返回有關當前數據庫中的模式作用域對象的信息。此函數不能用於不是模式范圍的對象,例如數據定義語言(DDL)觸發器和事件通知。

OBJECTPROPERTY 語法:

1 OBJECTPROPERTY ( id , property ) 

參數:

id:表示當前數據庫中對象ID的表達式。id是int,並且被假定為當前數據庫上下文中的模式作用域對象。

property:是表示由id指定的對象返回的信息的表達式。屬性可以是以下值之一。

注意:

除非另有說明,否則當屬性不是有效的屬性名稱時返回NULL ,id不是有效的對象ID,

id是指定屬性的不受支持的對象類型,或者調用者沒有查看對象元數據的權限。

 

屬性名稱 對象類型 說明和返回的值
CnstIsClustKey 約束

具有聚集索引的 PRIMARY KEY 約束。

1 = True

0 = False

CnstIsColumn 約束

單個列上的 CHECK、DEFAULT 或 FOREIGN KEY 約束。

1 = True

0 = False

CnstIsDeleteCascade 約束

具有 ON DELETE CASCADE 選項的 FOREIGN KEY 約束。

1 = True

0 = False

CnstIsDisabled 約束

禁用的約束。

1 = True

0 = False

CnstIsNonclustKey 約束

非聚集索引的 PRIMARY KEY 或 UNIQUE 約束。

1 = True

0 = False

CnstIsNotRepl 約束

使用 NOT FOR REPLICATION 關鍵字定義的約束。

1 = True

0 = False

CnstIsNotTrusted 約束

啟用約束時未檢查現有行,因此可能不是所有行都適用該約束。

1 = True

0 = False

CnstIsUpdateCascade 約束

具有 ON UPDATE CASCADE 選項的 FOREIGN KEY 約束。

1 = True

0 = False

ExecIsAfterTrigger 觸發器

AFTER 觸發器。

1 = True

0 = False

ExecIsAnsiNullsOn Transact-SQL 函數、Transact-SQL 過程、Transact-SQL 觸發器、視圖

創建時的 ANSI_NULLS 設置。

1 = True

0 = False

ExecIsDeleteTrigger 觸發器

DELETE 觸發器。

1 = True

0 = False

ExecIsFirstDeleteTrigger 觸發器

對表執行 DELETE 時觸發的第一個觸發器。

1 = True

0 = False

ExecIsFirstInsertTrigger 觸發器

對表執行 INSERT 時觸發的第一個觸發器。

1 = True

0 = False

ExecIsFirstUpdateTrigger 觸發器

對表執行 UPDATE 時觸發的第一個觸發器。

1 = True

0 = False

ExecIsInsertTrigger 觸發器

INSERT 觸發器。

1 = True

0 = False

ExecIsInsteadOfTrigger 觸發器

INSTEAD OF 觸發器。

1 = True

0 = False

ExecIsLastDeleteTrigger 觸發器

對表執行 DELETE 時激發的最后一個觸發器。

1 = True

0 = False

ExecIsLastInsertTrigger 觸發器

對表執行 INSERT 時激發的最后一個觸發器。

1 = True

0 = False

ExecIsLastUpdateTrigger 觸發器

對表執行 UPDATE 時激發的最后一個觸發器。

1 = True

0 = False

ExecIsQuotedIdentOn Transact-SQL 函數、Transact-SQL 過程、Transact-SQL 觸發器、視圖

創建時的 QUOTED_IDENTIFIER 設置。

1 = True

0 = False

ExecIsStartup 過程

啟動過程。

1 = True

0 = False

ExecIsTriggerDisabled 觸發器

禁用的觸發器。

1 = True

0 = False

ExecIsTriggerNotForRepl 觸發器

定義為 NOT FOR REPLICATION 的觸發器。

1 = True

0 = False

ExecIsUpdateTrigger 觸發器

UPDATE 觸發器。

1 = True

0 = False

HasAfterTrigger 表、視圖

表或視圖具有 AFTER 觸發器。

1 = True

0 = False

HasDeleteTrigger 表、視圖

表或視圖具有 DELETE 觸發器。

1 = True

0 = False

HasInsertTrigger 表、視圖

表或視圖具有 INSERT 觸發器。

1 = True

0 = False

HasInsteadOfTrigger 表、視圖

表或視圖具有 INSTEAD OF 觸發器。

1 = True

0 = False

HasUpdateTrigger 表、視圖

表或視圖具有 UPDATE 觸發器。

1 = True

0 = False

IsAnsiNullsOn Transact-SQL 函數、Transact-SQL 過程、表、Transact-SQL 觸發器、視圖

指定表的 ANSI NULLS 選項設置為 ON。這表示所有對空值的比較都取值為 UNKNOWN。只要表存在,此設置將應用於表定義中的所有表達式,包括計算列和約束。

1 = True

0 = False

IsCheckCnst 架構范圍內的任何對象

CHECK 約束。

1 = True

0 = False

IsConstraint 架構范圍內的任何對象

列或表的單列 CHECK、DEFAULT 或 FOREIGN KEY 約束。

1 = True

0 = False

IsDefault 架構范圍內的任何對象

綁定的默認值。

1 = True

0 = False

IsDefaultCnst 架構范圍內的任何對象

DEFAULT 約束。

1 = True

0 = False

IsDeterministic 函數、視圖

函數或視圖的確定性屬性。

1 = 確定

0 = 不確定

IsEncrypted Transact-SQL 函數、Transact-SQL 過程、表、Transact-SQL 觸發器和視圖

指示模塊語句的原始文本已轉換為模糊格式。模糊代碼的輸出在 SQL Server 2005 的任何目錄視圖中都不能直接顯示。對系統表或數據庫文件沒有訪問權限的用戶不能檢索模糊文本。但是,能夠通過 DAC 端口訪問系統表的用戶或能夠直接訪問數據庫文件的用戶可以檢索此文本。此外,能夠向服務器進程附加調試器的用戶可在運行時從內存中檢索原始過程。

1 = 已加密

0 = 未加密

基本數據類型:int

IsExecuted 架構范圍內的任何對象

可執行對象(視圖、過程、函數或觸發器)。

1 = True

0 = False

IsExtendedProc 架構范圍內的任何對象

擴展過程。

1 = True

0 = False

IsForeignKey 架構范圍內的任何對象

FOREIGN KEY 約束。

1 = True

0 = False

IsIndexed 表、視圖

包含索引的表或視圖。

1 = True

0 = False

IsIndexable 表、視圖

可以創建索引的表或視圖。

1 = True

0 = False

IsInlineFunction 函數

內聯函數。

1 = 內聯函數

0 = 非內聯函數

IsMSShipped 架構范圍內的任何對象

安裝 SQL Server 過程中創建的對象。

1 = True

0 = False

IsPrimaryKey 架構范圍內的任何對象

PRIMARY KEY 約束。

1 = True

0 = False

NULL = 非函數,或對象 ID 無效。

IsProcedure 架構范圍內的任何對象

過程。

1 = True

0 = False

IsQuotedIdentOn Transact-SQL 函數、Transact-SQL 過程、表、Transact-SQL 觸發器、視圖、CHECK 約束、DEFAULT 定義

指定對象的引號標識符設置為 ON。這表示用英文雙引號分隔對象定義中涉及的所有表達式中的標識符。

1 = ON

0 = OFF

IsQueue 架構范圍內的任何對象

Service Broker 隊列

1 = True

0 = False

IsReplProc 架構范圍內的任何對象

復制過程。

1 = True

0 = False

IsRule 架構范圍內的任何對象

綁定規則。

1 = True

0 = False

IsScalarFunction 函數

標量值函數。

1 = 標量值函數

0 = 非標量值函數

IsSchemaBound 函數、視圖

使用 SCHEMABINDING 創建的綁定到架構的函數或視圖。

1 = 綁定到架構

0 = 不綁定架構。

IsSystemTable

系統表。

1 = True

0 = False

IsTable

表。

1 = True

0 = False

IsTableFunction 函數

表值函數。

1 = 表值函數

0 = 非表值函數

IsTrigger 架構范圍內的任何對象

觸發器。

1 = True

0 = False

 IsUniqueCnst  架構范圍內的任何對象  

UNIQUE 約束。

1 = True

0 = False

 IsUserTable  表  

用戶定義的表。

1 = True

0 = False

 IsView  視圖  

視圖。

1 = True

0 = False

 OwnerId  架構范圍內的任何對象

 對象的所有者。

注意:

架構所有者不一定是對象所有者。例如,子對象(其 parent_object_id 為非空值)將始終返回與父對象相同的所有者 ID。

Nonnull = 對象所有者的數據庫用戶 ID。

 TableDeleteTrigger  表  

表具有 DELETE 觸發器。

>1 = 指定類型的第一個觸發器的 ID。

 TableDeleteTriggerCount  表  

表具有指定數目的 DELETE 觸發器。

>0 = DELETE 觸發器數目。

 TableFullTextMergeStatus  表  

表所具有的全文索引當前是否正在合並。

0 = 表沒有全文索引,或者全文索引未在合並。

1 = 全文索引正在合並。

 TableFullTextBackgroundUpdateIndexOn  表  

表已啟用全文后台更新索引(自動更改跟蹤)。

1 = TRUE

0 = FALSE

 TableFulltextCatalogId  表  

表的全文索引數據所在的全文目錄的 ID。

非零 = 全文目錄 ID,它與全文索引表中標識行的唯一索引相關。

0 = 表沒有全文索引。

 TableFulltextChangeTrackingOn  表  

適用於:SQL Server 2008通過SQL Server 2016. 

表格啟用了全文變更跟蹤。

1 = TRUE 

0 = FALSE

TableFulltextDocsProcessed

適用於:SQL Server 2008通過SQL Server 2016. 

自全文索引開始以來處理的行數。在為全文搜索索引的表中,一行的所有列都被視為要編制索引的一個文檔的一部分。

0 =沒有主動抓取或全文索引完成。

> 0 =以下之一(A或B):A)自完成,增量或手動更改跟蹤人口開始以來,通過插入或更新操作處理的文檔數。B)啟用了具有后台更新索引總體的更改跟蹤后由插入或更新操作處理的行數,全文索引架構已更改,重新創建全文目錄或重新啟動SQL Server實例等。

NULL =表沒有全文索引。

TableFulltextFailCount 行數全文搜索沒有索引。

0 =人口已經完成。

> 0 =以下(A或B)之一:A)自完全,增量和手動更新開始以來未編入索引的文檔數量更改跟蹤人口。B)對於具有后台更新索引的變更跟蹤,自開始人口以來未編入索引的行數,或者重新啟動人口。這可能是由於模式更改,目錄重建,服務器重新啟動等引起的。

NULL =表沒有全文索引。
TableFulltextItemCount 成功全文索引的行數
TableFulltextKeyColumn 與參與全文索引定義的單列唯一索引相關聯的列的ID。

0 =表沒有全文索引。
TableFulltextPendingChanges

要處理的掛起更改跟蹤項的數目。

0 = 未啟用更改跟蹤。

NULL = 表沒有全文索引。

TableFulltextPopulateStatus

0 = 空閑。

1 = 正在進行完全填充。

2 = 正在進行增量填充。

3 = 正在傳播所跟蹤的更改。

4 = 正在進行后台更新索引(例如,自動跟蹤更改)。

5 = 全文索引已中止或暫停。

TableHasActiveFulltextIndex

表具有活動的全文索引。

1 = True

0 = False

TableHasCheckCnst

表具有 CHECK 約束。

1 = True

0 = False

TableHasClustIndex

表具有聚集索引。

1 = True

0 = False

TableHasDefaultCnst

表具有 DEFAULT 約束。

1 = True

0 = False

TableHasDeleteTrigger

表具有 DELETE 觸發器。

1 = True

0 = False

 TableHasForeignKey  表  

表具有 FOREIGN KEY 約束。

1 = True

0 = False

 TableHasForeignRef  表  

表由 FOREIGN KEY 約束引用。

1 = True

0 = False

 TableHasIdentity  表  

表具有標識列。

1 = True

0 = False

 TableHasIndex  表  

表具有任意類型的索引。

1 = True

0 = False

 TableHasInsertTrigger  表  

對象具有 INSERT 觸發器。

1 = True

0 = False

 TableHasNonclustIndex  表  

表有非聚集索引。

1 = True

0 = False

 TableHasPrimaryKey  

表具有主鍵。

1 = True

0 = False

TableHasRowGuidCol

表具有用於唯一標識ROWGUIDCOL

1 = True 

0 = False

TableHasTextImage

表具有 textntext 或 image 列。

1 = True

0 = False

TableHasTimestamp

表具有一個時間戳列。

1 = True 

0 = False

TableHasUniqueCnst

表具有 UNIQUE 約束。

1 = True

0 = False

TableHasUpdateTrigger

對象有 UPDATE 觸發器。

1 = True

0 = False

TableHasVarDecimalStorageFormat 表啟用了vardecimal存儲格式。

1 = True 

0 = False
TableInsertTrigger

表具有 INSERT 觸發器。

>1 = 指定類型的第一個觸發器的 ID。

TableInsertTriggerCount

表有指定數目的 INSERT 觸發器。

>0 = INSERT 觸發器的個數。

TableIsFake

表不是真實的表。它將由 SQL Server 數據庫引擎根據需要在內部進行具體化。

1 = True

0 = False

 TableIsLockedOnBulkLoad  由於bcp或BULK INSERT作業,表被鎖定。

1 = True 

0 = False
 TableIsPinned  表被固定在數據緩存中。

0 = False
 TableIsMemoryOptimized  表是內存優化

1 = True 

0 = False 

基本數據類型:int
 TableTextInRowLimit  行中的文本允許的最大字節數。

如果沒有設置行中的文本選項,則為0。
TableUpdateTrigger 表有一個UPDATE觸發器。

> 1 =具有指定類型的第一個觸發器的ID。
TableUpdateTriggerCount

該表具有指定數量的UPDATE觸發器。

> 0 = UPDATE觸發器的數量。

TableHasColumnSet

表具有列集。

0 = False

1 = True

TableTemporalType 指定表的類型。

0 =非時間表

1 =系統版本表

2的歷史表2 =系統版本化的時間表

 

返回類型:

int

例外:

如果調用者沒有查看對象的權限,則返回NULL。

用戶只能查看用戶所擁有的或用戶已被授予許可權限的元數據。

這意味着,如果用戶對該對象沒有任何權限,則元數據發放的內置函數(如OBJECTPROPERTY)可能返回NULL。

備注:

數據庫引擎假定object_id在當前數據庫上下文中。引用一個查詢OBJECT_ID在另一個數據庫將返回NULL或不正確的結果。

例如,在以下查詢中,當前數據庫上下文是主數據庫。數據庫引擎將嘗試返回該數據庫中指定的object_id的屬性值,而不是返回查詢中指定的數據庫。

該查詢返回不正確的結果,因為視圖vEmployee不在主數據庫中。

1 USE master;  
2 GO  
3 SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks2012.HumanResources.vEmployee'), 'IsView');  
4 GO 

OBJECTPROPERTY(view_id,'IsIndexable')可能會消耗重要的計算機資源,因為IsIndexable屬性的評估需要解析視圖定義,規范化和部分優化。

雖然IsIndexable屬性標識可以進行索引的表或視圖,但是如果不滿足某些索引關鍵要求,索引的實際創建仍然可能會失敗。

當添加表的至少一列進行索引時,OBJECTPROPERTY(table_id,'TableHasActiveFulltextIndex')將返回值為1(true)。

只要添加第一列進行索引,全文索引就會變得活躍。

創建表時,即使在創建表時該選項設置為OFF,QUOTED IDENTIFIER選項始終作為ON存儲在表的元數據中。

因此,OBJECTPROPERTY(table_id,'IsQuotedIdentOn')將始終返回值1(true)。

示例:

 1 -- 驗證 dbo.Department 是否是一個表
 2 IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') = 1)
 3 begin
 4     select 'Department 是一個表'
 5 end
 6 ELSE IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') = 0)
 7 begin
 8     select 'Department 不是一個表'
 9 end
10 ELSE IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') IS NULL)
11 begin
12     select 'Department 不是一個有效的對象'
13 end
14 GO

 

1 -- 驗證 自定義 的標量函數 是否 是確定性的
2 SELECT OBJECTPROPERTY(OBJECT_ID('dbo.AvgHeight'), 'IsDeterministic');    --返回 0  表示不確定

 

1 --使用 SchemaId 屬性返回所有者 dbo 的所有對象
2 SELECT name, object_id, type_desc  
3 FROM sys.objects   
4 WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
5 ORDER BY type_desc, name;--使用 SchemaId 屬性返回所有者 dbo 的所有對象
6 SELECT name, object_id, type_desc  
7 FROM sys.objects   
8 WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
9 ORDER BY type_desc, name;

 

 1 -- 驗證表 Department 是否 是用戶自定義的表
 2 IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'IsUserTable') = 1)
 3 begin
 4    SELECT 'Department 是用戶自定義的表'  
 5 end
 6 ELSE   
 7 begin
 8    SELECT 'Department 不是用戶自定義的表';  
 9 end
10 GO 

 

參考:

http://blog.csdn.net/htl258/article/details/5645150

https://docs.microsoft.com/en-us/sql/t-sql/functions/objectproperty-transact-sql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM