OBJECTPROPERTY (Transact-SQL)

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

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

語法

OBJECTPROPERTY ( id , property ) 

引數

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

  • property
    這是代表 id 指定的物件之傳回資訊的運算式。property 可以是下列值之一。

    [!附註]

    除非另有說明,否則,當 property 不是有效屬性的名稱、id 不是有效的物件識別碼、id 不是指定 property 所支援的物件類型,或呼叫者沒有檢視物件中繼資料的權限時,便傳回 NULL。

    屬性名稱

    物件類型

    描述和傳回的值

    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。這表示所有對於 Null 值的比較都會得出 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 = 不是函數,或物件識別碼無效。

    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 是非 Null 的物件) 一律會傳回與父系相同的擁有者識別碼。

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

    TableDeleteTrigger

    資料表

    資料表有 DELETE 觸發程序。

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

    TableDeleteTriggerCount

    資料表

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

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

    TableFullTextMergeStatus

    資料表

    具有全文檢索索引的資料表目前是否正在合併。

    0 = 資料表沒有全文檢索索引,或是全文檢索索引並未合併。

    1 = 全文檢索索引正在合併。

    TableFullTextBackgroundUpdateIndexOn

    資料表

    資料表啟用全文檢索背景更新索引 (自動變更追蹤)。

    1 = TRUE

    0 = FALSE

    TableFulltextCatalogId

    資料表

    資料表的全文檢索索引資料所在的全文檢索目錄識別碼。

    非零 = 全文檢索目錄識別碼,關聯於用來識別全文檢索索引資料表中的資料列之唯一索引。

    0 = 資料表沒有全文檢索索引。

    TableFulltextChangeTrackingOn

    資料表

    資料表啟用全文檢索變更追蹤。

    1 = TRUE

    0 = FALSE

    TableFulltextDocsProcessed

    資料表

    全文檢索索引啟動之後所處理的資料列數。在建立全文檢索搜尋索引的資料表中,單一資料列的所有資料行都會被視為單一文件的一部分來建立索引。

    0 = 沒有使用中的搜耙,或全文檢索索引已完成。

    > 0 = 下列項目之一:

    • 在啟動完整、累加或手動變更追蹤擴展之後,插入或更新作業所處理的文件數目。

    • 啟用含背景更新索引擴展的變更追蹤、變更全文檢索索引結構描述、重建全文檢索目錄,或重新啟動 SQL Server 執行個體等作業之後,插入或更新作業所處理的資料列數。

    NULL = 資料表沒有全文檢索索引。

    附註附註
    這個屬性不會監視或計算已刪除的資料列。

    TableFulltextFailCount

    資料表

    全文檢索搜尋未建立索引的資料列數。

    0 = 已擴展完成。

    > 0 = 下列項目之一:

    • 啟動完整、累加或手動更新變更追蹤擴展之後,尚未建立索引的文件數目。

    • 對於背景更新索引的變更追蹤,在開始擴展或重新開始擴展之後,尚未建立索引的資料列數。這可能是結構描述變更、重建目錄、伺服器重新啟動等所造成的。

    NULL = 資料表沒有全文檢索索引。

    TableFulltextItemCount

    資料表

    已順利建立全文檢索索引的資料列數。

    TableFulltextKeyColumn

    資料表

    參與全文檢索索引定義之單一資料行唯一索引的相關資料行識別碼。

    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

    資料表

    資料表有 uniqueidentifier 資料行的 ROWGUIDCOL。

    1 = True

    0 = False

    TableHasTextImage

    資料表

    資料表有 text、ntext 或 image 資料行。

    1 = True

    0 = False

    TableHasTimestamp

    資料表

    資料表有 timestamp 資料行。

    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 = 含指定類型的第一個觸發程序的識別碼。

    TableInsertTriggerCount

    資料表

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

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

    TableIsFake

    資料表

    資料表不是真正的資料表。SQL Server Database Engine 在內部視需要而將它具體化。

    1 = True

    0 = False

    TableIsLockedOnBulkLoad

    資料表

    資料表因 bcp 或 BULK INSERT 作業而遭到鎖定。

    1 = True

    0 = False

    TableIsPinned

    資料表

    資料表固定保留在資料快取中。

    0 = False

    SQL Server 2005 及更新版本中不支援這項功能。

    TableTextInRowLimit

    資料表

    text in row 所允許的最大位元組數目。

    如果未設定 text in row 選項,便是 0。

    TableUpdateTrigger

    資料表

    資料表有 UPDATE 觸發程序。

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

    TableUpdateTriggerCount

    資料表

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

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

    TableHasColumnSet

    資料表

    資料表有資料行集。

    0 = False

    1 = True

    如需詳細資訊,請參閱<使用資料行集>。

傳回類型

int

例外狀況

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

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

備註

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

USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks2008R2.HumanResources.vEmployee'), 'IsView');
GO

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

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

當建立資料表時,一律會在資料表的中繼資料中,將 QUOTED IDENTIFIER 選項儲存成 ON,即使建立資料表時,將選項設成 OFF,也是如此。因此,OBJECTPROPERTY(table_id, 'IsQuotedIdentOn') 一律會傳回 1 (true) 這個值。

範例

A. 確認物件是一份資料表

下列範例會測試 UnitMeasure 是否為 AdventureWorks2008R2 資料庫中的資料表。

USE AdventureWorks2008R2;
GO
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1
   PRINT 'UnitMeasure is a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0
   PRINT 'UnitMeasure is not a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL
   PRINT 'ERROR: UnitMeasure is not a valid object.';
GO

B. 確認純量值使用者定義函數具決定性

下列範例會測試使用者定義的純量值函數 ufnGetProductDealerPrice (會傳回 money 值) 是否具決定性。

USE AdventureWorks2008R2;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO

結果集會顯示 ufnGetProductDealerPrice 不是具決定性的函數。

-----

0

C. 尋找屬於特定結構描述的物件

下列範例會利用 SchemaId 屬性來傳回屬於 Production 結構描述的所有物件。

USE AdventureWorks2008R2;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'Production')
ORDER BY type_desc, name;
GO