OBJECTPROPERTYEX (Transact-SQL)
傳回目前資料庫中以結構描述為範圍之物件的相關資訊。如需這些物件的清單,請參閱<sys.objects (Transact-SQL)>。不是以結構描述為範圍的物件,如資料定義語言 (DDL) 觸發程序和事件通知,無法使用 OBJECTPROPERTYEX。
語法
OBJECTPROPERTYEX ( id , property )
引數
id
這是代表目前資料庫中之物件識別碼的運算式。id 是 int,假設為在目前資料庫內容中以結構描述為範圍的物件。property
這是包含為識別碼指定之物件所傳回資訊的運算式。傳回類型是 sql_variant。下表顯示了每一屬性值的基底資料類型。[!附註]
除非另有指示,否則當 property 不是有效的屬性名稱、id 不是有效的物件識別碼、id 不是指定之 property 所支援的物件類型,或呼叫端沒有檢視物件中繼資料的權限時,便會傳回 NULL。
屬性名稱
物件類型
描述和傳回的值
BaseType
任何結構描述範圍物件
識別物件的基底類型。當指定的物件為 SYNONYM 時,會傳回基礎物件的基底類型。
Nonnull = 物件類型
基底資料類型:char(2)
CnstIsClustKey
條件約束
含叢集索引的 PRIMARY KEY 條件約束。
1 = True
0 = False
基底資料類型:int
CnstIsColumn
條件約束
單一資料行的 CHECK、DEFAULT 或 FOREIGN KEY 條件約束。
1 = True
0 = False
基底資料類型:int
CnstIsDeleteCascade
條件約束
含 ON DELETE CASCADE 選項的 FOREIGN KEY 條件約束。
1 = True
0 = False
基底資料類型:int
CnstIsDisabled
條件約束
停用的條件約束。
1 = True
0 = False
基底資料類型:int
CnstIsNonclustKey
條件約束
含非叢集索引的 PRIMARY KEY 條件約束。
1 = True
0 = False
基底資料類型:int
CnstIsNotRepl
條件約束
條件約束是利用 NOT FOR REPLICATION 關鍵字來定義的。
1 = True
0 = False
基底資料類型:int
CnstIsNotTrusted
條件約束
啟用條件約束而不檢查現有的資料列。因此,此條件約束可能不會包含所有的資料列。
1 = True
0 = False
基底資料類型:int
CnstIsUpdateCascade
條件約束
含 ON UPDATE CASCADE 選項的 FOREIGN KEY 條件約束。
1 = True
0 = False
基底資料類型:int
ExecIsAfterTrigger
觸發程序
AFTER 觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsAnsiNullsOn
Transact-SQL 函數、Transact-SQL 程序、Transact-SQL 觸發程序、檢視表
建立期間的 ANSI_NULLS 設定。
1 = True
0 = False
基底資料類型:int
ExecIsDeleteTrigger
觸發程序
DELETE 觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsFirstDeleteTrigger
觸發程序
當執行資料表的 DELETE 作業時,所引發的第一個觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsFirstInsertTrigger
觸發程序
當執行資料表的 INSERT 作業時,所引發的第一個觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsFirstUpdateTrigger
觸發程序
當執行資料表的 UPDATE 作業時,所引發的第一個觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsInsertTrigger
觸發程序
INSERT 觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsInsteadOfTrigger
觸發程序
INSTEAD OF 觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsLastDeleteTrigger
觸發程序
當執行資料表的 DELETE 作業時,所引發的最後一個觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsLastInsertTrigger
觸發程序
當執行資料表的 INSERT 作業時,所引發的最後一個觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsLastUpdateTrigger
觸發程序
當執行資料表的 UPDATE 作業時,所引發的最後一個觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsQuotedIdentOn
Transact-SQL 函數、Transact-SQL 程序、Transact-SQL 觸發程序、檢視表
建立期間的 QUOTED_IDENTIFIER 設定。
1 = True
0 = False
基底資料類型:int
ExecIsStartup
程序
啟動程序。
1 = True
0 = False
基底資料類型:int
ExecIsTriggerDisabled
觸發程序
停用的觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsTriggerNotForRepl
觸發程序
定義為 NOT FOR REPLICATION 的觸發程序。
1 = True
0 = False
基底資料類型:int
ExecIsUpdateTrigger
觸發程序
UPDATE 觸發程序。
1 = True
0 = False
基底資料類型:int
HasAfterTrigger
資料表、檢視表
資料表或檢視表都有一個 AFTER 觸發程序。
1 = True
0 = False
基底資料類型:int
HasDeleteTrigger
資料表、檢視表
資料表或檢視表都有一個 DELETE 觸發程序。
1 = True
0 = False
基底資料類型:int
HasInsertTrigger
資料表、檢視表
資料表或檢視表都有一個 INSERT 觸發程序。
1 = True
0 = False
基底資料類型:int
HasInsteadOfTrigger
資料表、檢視表
資料表或檢視表都有一個 INSTEAD OF 觸發程序。
1 = True
0 = False
基底資料類型:int
HasUpdateTrigger
資料表、檢視表
資料表或檢視表都有一個 UPDATE 觸發程序。
1 = True
0 = False
基底資料類型:int
IsAnsiNullsOn
Transact-SQL 函數、Transact-SQL 程序、資料表、Transact-SQL 觸發程序、檢視表
指定資料表的 ANSI NULLS 選項設定為 ON,表示所有與空值的比較都會得出 UNKNOWN。只要資料表存在,這項設定便適用於資料表定義中的所有運算式,其中包括計算資料行和條件約束。
1 = True
0 = False
基底資料類型:int
IsCheckCnst
任何結構描述範圍物件
CHECK 條件約束。
1 = True
0 = False
基底資料類型:int
IsConstraint
任何結構描述範圍物件
條件約束。
1 = True
0 = False
基底資料類型:int
IsDefault
任何結構描述範圍物件
繫結預設值。
1 = True
0 = False
基底資料類型:int
IsDefaultCnst
任何結構描述範圍物件
DEFAULT 條件約束。
1 = True
0 = False
基底資料類型:int
IsDeterministic
純量函數和資料表值函式、檢視表
函數或檢視表的決定性屬性。
1 = 具有決定性
0 = 不具決定性
基底資料類型:int
IsEncrypted
Transact-SQL 函數、Transact-SQL 程序、資料表、Transact-SQL 觸發程序、檢視表
指出此模組陳述式的原始文字已轉換為混亂格式。在 SQL Server 2005 中,無法直接從任何目錄檢視中看見混亂格式的輸出。對系統資料表或資料庫檔案沒有存取權的使用者,將無法擷取模糊化的文字。不過,可以透過 DAC 通訊埠存取系統資料表,或直接存取資料庫檔案的使用者,則可使用該文字。另外,可將偵錯工具附加至伺服器處理序的使用者,可以在執行階段從記憶體擷取原始程序。
1 = 已加密
0 = 未加密
基底資料類型:int
IsExecuted
任何結構描述範圍物件
指定可以執行物件 (檢視、程序、函數或觸發程序)。
1 = True
0 = False
基底資料類型:int
IsExtendedProc
任何結構描述範圍物件
擴充程序。
1 = True
0 = False
基底資料類型:int
IsForeignKey
任何結構描述範圍物件
FOREIGN KEY 條件約束。
1 = True
0 = False
基底資料類型:int
IsIndexed
資料表、檢視表
含索引的資料表或檢視表。
1 = True
0 = False
基底資料類型:int
IsIndexable
資料表、檢視表
可以建立索引的資料表或檢視表。
1 = True
0 = False
基底資料類型:int
IsInlineFunction
函數
內嵌函數。
1 = 內嵌函數
0 = 非內嵌函數
基底資料類型:int
IsMSShipped
任何結構描述範圍物件
在安裝 SQL Server 時所建立的物件。
1 = True
0 = False
基底資料類型:int
IsPrecise
已計算的資料行、函數、使用者自訂類型、檢視表
指出物件是否包含浮點運算等不精確的計算。
1 = 精確
0 = 不精確
基底資料類型:int
IsPrimaryKey
任何結構描述範圍物件
PRIMARY KEY 條件約束。
1 = True
0 = False
基底資料類型:int
IsProcedure
任何結構描述範圍物件
程序。
1 = True
0 = False
基底資料類型:int
IsQuotedIdentOn
CHECK 條件約束、DEFAULT 定義、Transact-SQL 函數、Transact-SQL 程序、資料表、Transact-SQL 觸發程序、檢視表
指定物件的引用識別碼設定為 ON,表示雙引號可在與物件定義有關的所有運算式中分隔識別碼。
1 = True
0 = False
基底資料類型:int
IsQueue
任何結構描述範圍物件
Service Broker 佇列
1 = True
0 = False
基底資料類型:int
IsReplProc
任何結構描述範圍物件
複寫程序。
1 = True
0 = False
基底資料類型:int
IsRule
任何結構描述範圍物件
繫結規則。
1 = True
0 = False
基底資料類型:int
IsScalarFunction
函數
純量值函數。
1 = 純量值函數
0 = 非純量值函數
基底資料類型:int
IsSchemaBound
函數、檢視表
利用 SCHEMABINDING 來建立的結構描述繫結函數或檢視表。
1 = 結構描述繫結
0 = 非結構描述繫結
基底資料類型:int
IsSystemTable
資料表
系統資料表。
1 = True
0 = False
基底資料類型:int
IsSystemVerified
已計算的資料行、函數、使用者自訂類型、檢視表
SQL Server 可以驗證物件的有效位數和決定性屬性。
1 = True
0 = False
基底資料類型:int
IsTable
資料表
資料表。
1 = True
0 = False
基底資料類型:int
IsTableFunction
函數
資料表值函式。
1 = 資料表值函式
0 = 非資料表值函式
基底資料類型:int
IsTrigger
任何結構描述範圍物件
觸發程序。
1 = True
0 = False
基底資料類型:int
IsUniqueCnst
任何結構描述範圍物件
UNIQUE 條件約束。
1 = True
0 = False
基底資料類型:int
IsUserTable
資料表
使用者自訂資料表。
1 = True
0 = False
基底資料類型:int
IsView
檢視表
檢視表。
1 = True
0 = False
基底資料類型:int
OwnerId
任何結構描述範圍物件
物件的擁有者。
附註結構描述擁有者不一定是物件擁有者。例如,子物件 (parent_object_id 是非 Null 的物件) 一律會傳回與父系相同的擁有者識別碼。Nonnull = 物件擁有者的資料庫使用者識別碼。
NULL = 不支援的物件類型,或物件識別碼無效。
基底資料類型:int
SchemaId
任何結構描述範圍物件
與物件相關聯的結構描述識別碼。
Nonnull = 物件的結構描述識別碼。
基底資料類型:int
SystemDataAccess
函數、檢視表
物件在 SQL Server 的本機執行個體中存取系統資料、系統目錄或虛擬系統資料表。
0 = 無
1 = 讀取
基底資料類型:int
TableDeleteTrigger
資料表
資料表有 DELETE 觸發程序。
>1 = 含指定類型的第一個觸發程序的識別碼。
基底資料類型:int
TableDeleteTriggerCount
資料表
資料表有指定數目的 DELETE 觸發程序。
Nonnull = DELETE 觸發程序的數量
基底資料類型:int
TableFullTextMergeStatus
資料表
具有全文檢索索引的資料表目前是否正在合併。
0 = 資料表沒有全文檢索索引,或是全文檢索索引並未合併。
1 = 全文檢索索引正在合併。
TableFullTextBackgroundUpdateIndexOn
資料表
資料表啟用了全文檢索的背景更新索引 (自動變更追蹤)。
1 = TRUE
0 = FALSE
基底資料類型:int
TableFulltextCatalogId
資料表
資料表的全文檢索索引資料所在的全文檢索目錄識別碼。
非零 = 全文檢索目錄識別碼,關聯於用來識別全文檢索索引資料表中的資料列之唯一索引。
0 = 資料表沒有全文檢索索引。
基底資料類型:int
TableFullTextChangeTrackingOn
資料表
資料表啟用全文檢索變更追蹤。
1 = TRUE
0 = FALSE
基底資料類型:int
TableFulltextDocsProcessed
資料表
全文檢索索引啟動之後所處理的資料列數。在建立全文檢索搜尋索引的資料表中,單一資料列的所有資料行都會被視為單一文件的一部分來建立索引。
0 = 沒有使用中的搜耙,或全文檢索索引已完成。
> 0 = 下列項目之一:
在啟動完整、累加或手動變更追蹤擴展之後,插入或更新作業所處理的文件數目。
啟用含背景更新索引擴展的變更追蹤、變更全文檢索索引結構描述、重建全文檢索目錄,或重新啟動 SQL Server 執行個體等作業之後,插入或更新作業所處理的資料列數。
NULL = 資料表沒有全文檢索索引。
基底資料類型:int
注意:這個屬性不會監視或計算已刪除的資料列。
TableFulltextFailCount
資料表
全文檢索搜尋功能尚未建立索引的資料列數。
0 = 已擴展完成。
> 0 = 下列項目之一:
啟動完整、累加或手動更新變更追蹤擴展之後,尚未建立索引的文件數目。
對於背景更新索引的變更追蹤,在開始擴展或重新開始擴展之後,尚未建立索引的資料列數。這可能是結構描述變更、重建目錄、伺服器重新啟動等所造成的。
NULL = 資料表沒有全文檢索索引。
基底資料類型:int
TableFulltextItemCount
資料表
Nonnull = 已順利建立全文檢索索引的資料列數。
NULL = 資料表沒有全文檢索索引。
基底資料類型:int
TableFulltextKeyColumn
資料表
參與全文檢索索引定義之單一資料行唯一索引的相關資料行識別碼。
0 = 資料表沒有全文檢索索引。
基底資料類型:int
TableFulltextPendingChanges
資料表
要處理的暫止變更追蹤項目數。
0 = 未啟用變更追蹤。
NULL = 資料表沒有全文檢索索引。
基底資料類型:int
TableFulltextPopulateStatus
資料表
0 = 閒置。
1 = 完整擴展在進行中。
2 = 累加擴展在進行中。
3 = 追蹤變更的傳播在進行中。
4 = 背景更新索引在進行中,如自動變更追蹤。
5 = 全文檢索索引在調整執行速度或暫停。
基底資料類型:int
TableHasActiveFulltextIndex
資料表
資料表有使用中的全文檢索索引。
1 = True
0 = False
基底資料類型:int
TableHasCheckCnst
資料表
資料表有 CHECK 條件約束。
1 = True
0 = False
基底資料類型:int
TableHasClustIndex
資料表
資料表有叢集索引。
1 = True
0 = False
基底資料類型:int
TableHasDefaultCnst
資料表
資料表有 DEFAULT 條件約束。
1 = True
0 = False
基底資料類型:int
TableHasDeleteTrigger
資料表
資料表有 DELETE 觸發程序。
1 = True
0 = False
基底資料類型:int
TableHasForeignKey
資料表
資料表有 FOREIGN KEY 條件約束。
1 = True
0 = False
基底資料類型:int
TableHasForeignRef
資料表
資料表由 FOREIGN KEY 條件約束參考。
1 = True
0 = False
基底資料類型:int
TableHasIdentity
資料表
資料表有識別欄位。
1 = True
0 = False
基底資料類型:int
TableHasIndex
資料表
資料表有任何類型的索引。
1 = True
0 = False
基底資料類型:int
TableHasInsertTrigger
資料表
物件有 INSERT 觸發程序。
1 = True
0 = False
基底資料類型:int
TableHasNonclustIndex
資料表
資料表有非叢集索引。
1 = True
0 = False
基底資料類型:int
TableHasPrimaryKey
資料表
資料表有主索引鍵。
1 = True
0 = False
基底資料類型:int
TableHasRowGuidCol
資料表
資料表有 uniqueidentifier 資料行的 ROWGUIDCOL。
1 = True
0 = False
基底資料類型:int
TableHasTextImage
資料表
資料表有 text、ntext 或 image 資料行。
1 = True
0 = False
基底資料類型:int
TableHasTimestamp
資料表
資料表有 timestamp 資料行。
1 = True
0 = False
基底資料類型:int
TableHasUniqueCnst
資料表
資料表有 UNIQUE 條件約束。
1 = True
0 = False
基底資料類型:int
TableHasUpdateTrigger
資料表
物件有 UPDATE 觸發程序。
1 = True
0 = False
基底資料類型:int
TableHasVarDecimalStorageFormat
資料表
資料表已啟用 vardecimal 儲存格式。
1 = True
0 = False
TableInsertTrigger
資料表
資料表有 INSERT 觸發程序。
>1 = 含指定類型的第一個觸發程序的識別碼。
基底資料類型:int
TableInsertTriggerCount
資料表
資料表有指定數目的 INSERT 觸發程序。
>0 = INSERT 觸發程序的數目。
基底資料類型:int
TableIsFake
資料表
資料表不是真正的資料表。Database Engine 在內部視需要而將它具體化。
1 = True
0 = False
基底資料類型:int
TableIsLockedOnBulkLoad
資料表
資料表因 bcp 或 BULK INSERT 作業而遭到鎖定。
1 = True
0 = False
基底資料類型:int
TableIsPinned
資料表
資料表固定保留在資料快取中。
0 = False
SQL Server 2005 及更新版本中不支援這項功能。
TableTextInRowLimit
資料表
資料表有 text in row 選項集。
> 0 = text in row 所允許的最大位元組數目。
0 = 未設定 text in row 選項。
基底資料類型:int
TableUpdateTrigger
資料表
資料表有 UPDATE 觸發程序。
>1 = 含指定類型的第一個觸發程序的識別碼。
基底資料類型:int
TableUpdateTriggerCount
資料表
資料表有指定數目的 UPDATE 觸發程序。
>0 = UPDATE 觸發程序的數目。
基底資料類型:int
UserDataAccess
函數、檢視表
表示物件存取 SQL Server 本機執行個體中的使用者資料及使用者資料表。
1 = 讀取
0 = 無
基底資料類型:int
TableHasColumnSet
資料表
資料表有資料行集。
0 = False
1 = True
如需詳細資訊,請參閱<使用資料行集>。
傳回類型
sql_variant
例外狀況
當發生錯誤,或呼叫者沒有檢視物件的權限時,便會傳回 NULL。
使用者只能檢視使用者擁有或被授與某些權限之安全性實體的中繼資料。這表示發出中繼資料的內建函數 (例如,OBJECTPROPERTYEX) 會在使用者不具有該物件任何權限時傳回 NULL。如需詳細資訊,請參閱<中繼資料可見性組態>和<中繼資料可見性疑難排解>。
備註
Database Engine 假設 object_id 在目前資料庫內容中。參考另一資料庫中之 object_id 的查詢會傳回 NULL 或不正確的結果。例如,在下列查詢中,目前資料庫內容便是 master 資料庫。Database Engine 會嘗試傳回這個資料庫 (而不是查詢中所指定的資料庫) 中指定之 object_id 的屬性值。查詢會傳回不正確的結果,因為 vEmployee 檢視表不在 master 資料庫中。
USE master;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'AdventureWorks2008R2.HumanResources.vEmployee'), 'IsView');
GO
OBJECTPROPERTYEX(view_id, 'IsIndexable') 可能耗用大量電腦資源,因為評估 IsIndexable 屬性需要剖析檢視定義、正規化和部分最佳化。雖然 IsIndexable 屬性會識別能夠建立索引的資料表或檢視表,但如果不符合特定索引鍵需求,實際建立索引的作業仍可能失敗。如需詳細資訊,請參閱<CREATE INDEX (Transact-SQL)>。
當至少加入資料表的一個資料行來建立索引時,OBJECTPROPERTYEX (table_id, 'TableHasActiveFulltextIndex') 會傳回 1 (true) 這個值。只要加入第一個用來建立索引的資料行,全文檢索索引作業就會成為使用中,以便擴展。
結果集會套用中繼資料可見性的限制。如需詳細資訊,請參閱<中繼資料可見性組態>。
範例
A. 找出物件的基底類型
以下的範例在 AdventureWorks2008R2 資料庫中為 Employee 資料表建立了 SYNONYM MyEmployeeTable,然後傳回 SYNONYM 的基底類型。
USE AdventureWorks2008R2;
GO
CREATE SYNONYM MyEmployeeTable FOR HumanResources.Employee;
GO
SELECT OBJECTPROPERTYEX ( object_id(N'MyEmployeeTable'), N'BaseType')AS [Base Type];
GO
結果集顯示基礎物件 (Employee 資料表) 的基底類型是使用者資料表。
Base Type
--------
U
B. 傳回屬性值
以下的範例傳回了指定資料表的 UPDATE 觸發程序數量。
USE AdventureWorks2008R2;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'HumanResources.Employee'), N'TABLEUPDATETRIGGERCOUNT');
GO
C. 尋找具有 FOREIGN KEY 條件約束的資料表
下列範例使用 TableHasForeignKey 屬性來傳回具有 FOREIGN KEY 條件約束的所有資料表。
USE AdventureWorks2008R2;
GO
SELECT name, object_id, schema_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTYEX(object_id, N'TableHasForeignKey') = 1
ORDER BY name;
GO