The Wayback Machine - http://web.archive.org/web/20140109003804/http://msdn.microsoft.com:80/zh-tw/library/ms188390(v=sql.90).aspx
匯出 (0) 列印
全部展開
Expand Minimize
本主題尚未接受評分 - 為這個主題評分

OBJECTPROPERTYEX (Transact-SQL)

更新: 2006 年 12 月 12 日

傳回目前資料庫中以結構描述為範圍之物件的相關資訊。如需這些物件的清單,請參閱<sys.objects (Transact-SQL)>。不是以結構描述為範圍的物件,如資料定義語言 (DDL) 觸發程序和事件通知,無法使用 OBJECTPROPERTYEX。

主題連結圖示 Transact-SQL 語法慣例


OBJECTPROPERTYEX ( id , property )
id

這是代表目前資料庫中之物件識別碼的運算式。id 是 int,假設為在目前資料庫內容中以結構描述為範圍的物件。

property

這是包含為識別碼指定物件所傳回資訊的運算式。傳回類型為 sql_variant。下表顯示了每一屬性值的基底資料類型。

ms188390.note(zh-tw,SQL.90).gif附註:
除非另有說明,否則,當 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

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 2005 時所建立的物件。

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 的物件) 一律會傳回與父系相同的擁有者識別碼。
ms188390.note(zh-tw,SQL.90).gif附註:

Nonnull = 物件擁有者的資料庫使用者識別碼。

NULL = 不支援的物件類型,或物件識別碼無效。

基底資料類型:int

SchemaId

任何結構描述範圍物件

與物件相關聯的結構描述識別碼。

Nonnull = 物件的結構描述識別碼。

基底資料類型:int

SystemDataAccess

函數、檢視

物件在 SQL Server 的本機執行個體中存取系統資料、系統目錄或虛擬系統資料表。

0 = 無

1 = 讀取

基底資料類型:int

TableDeleteTrigger

資料表

資料表有 DELETE 觸發程序。

>1 = 含指定類型的第一個觸發程序的識別碼。

基底資料類型:int

TableDeleteTriggerCount

資料表

資料表有指定數目的 DELETE 觸發程序。

Nonnull = DELETE 觸發程序的數量

基底資料類型:int

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

如需有關 vardecimal 儲存格式的詳細資訊,請參閱<將十進位資料儲存成可變長度>。

TableInsertTrigger

資料表

資料表有 INSERT 觸發程序。

>1 = 含指定類型的第一個觸發程序的識別碼。

基底資料類型:int

TableInsertTriggerCount

資料表

資料表有指定數目的 INSERT 觸發程序。

>0 = INSERT 觸發程序的數目。

基底資料類型:int

TableIsFake

資料表

資料表不是真正的資料表。SQL Server 2005 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

sql_variant

當發生錯誤,或呼叫者沒有檢視物件的權限時,便會傳回 NULL。

在 SQL Server 2005 中,使用者只能檢視使用者擁有或被授與某些權限之安全性實體的中繼資料。這表示發出中繼資料的內建函數 (例如,OBJECTPROPERTYEX) 會在使用者不具有該物件任何權限時傳回 NULL。如需詳細資訊,請參閱<中繼資料可見性組態>和<中繼資料可見性疑難排解>。

Database Engine 假設 object_id 在目前資料庫內容中。參考另一資料庫中之 object_id 的查詢會傳回 NULL 或不正確的結果。例如,在下列查詢中,目前資料庫內容便是 master 資料庫。Database Engine 會嘗試傳回這個資料庫 (而不是查詢中所指定的資料庫) 中指定之 object_id 的屬性值。查詢會傳回不正確的結果,因為 vEmployee 檢視不在 master 資料庫中。

USE master;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView');
GO

OBJECTPROPERTYEX(view_id, 'IsIndexable') 可能耗用大量電腦資源,因為評估 IsIndexable 屬性需要剖析檢視定義、正規化和部分最佳化。雖然 IsIndexable 屬性會識別能夠建立索引的資料表或檢視,但如果不符合特定索引鍵需求,實際建立索引的作業仍可能失敗。如需詳細資訊,請參閱<CREATE INDEX (Transact-SQL)>。

當至少加入資料表的一個資料行來建立索引時,OBJECTPROPERTYEX (table_id, 'TableHasActiveFulltextIndex') 會傳回 1 (true) 值。只要加入第一個用來建立索引的資料行,全文檢索索引作業就會成為使用中,以便擴展。

結果集會套用中繼資料可見性的限制。如需詳細資訊,請參閱<中繼資料可見性組態>。

A. 找出物件的基底類型

以下的範例在 AdventureWorks 資料庫中為 Employee 資料表建立了 SYNONYM MyEmployeeTable,然後傳回 SYNONYM 的基底類型。

USE AdventureWorks;
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 AdventureWorks;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'HumanResources.Employee'), N'TABLEUPDATETRIGGERCOUNT');
GO

C. 尋找具有 FOREIGN KEY 條件約束的資料表

下列範例使用 TableHasForeignKey 屬性來傳回具有 FOREIGN KEY 條件約束的所有資料表。

USE AdventureWorks;
GO
SELECT name, object_id, schema_id, type_desc
FROM sys.objects 
WHERE OBJECTPROPERTYEX(object_id, N'TableHasForeignKey') = 1
ORDER BY name;
GO

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增 Service Pack 2 中提供的 TableHasVarDecimalStorageFormat 屬性。

2006 年 7 月 17 日

新增內容:
  • 加入「例外狀況」一節。

2005 年 12 月 5 日

變更的內容:
  • 更正 IsTableFunction 和 IsScalarFunction 屬性的定義。
  • 修改範例 C。
本文對您有任何幫助嗎?
(剩餘 1500 個字元)

社群新增項目

新增
Image
Microsoft 正展開一份線上問卷調查,了解您對於 MSDN 網站的看法。 如果您選擇參加,您離開 MSDN 網站時即會顯示線上問卷調查。

您是否想要參加?
顯示:
© 2014 Microsoft. 著作權所有,並保留一切權利。