分享方式:


OBJECTPROPERTY (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

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

Transact-SQL 語法慣例 (部分機器翻譯)

語法

OBJECTPROPERTY ( id , property )   

引數

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

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
ExecIsWithNativeCompilation Transact-SQL 程序 適用於:SQL Server 2014 (12.x) 和更新版本。

此為原生編譯的程序。

1 = True

0 = False

基底資料類型:int
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 任何結構描述範圍物件 適用於:SQL Server 2008 (10.0.x) 和更新版本。

繫結預設值。

1 = True

0 = False
IsDefaultCnst 任何結構描述範圍物件 DEFAULT 條件約束。

1 = True

0 = False
IsDeterministic 函數、檢視表 函數或檢視表的決定性屬性。

1 = 具有決定性

0 = 不具決定性
IsEncrypted Transact-SQL 函數、Transact-SQL 程序、資料表、Transact-SQL 觸發程序、檢視 指出此模組陳述式的原始文字已轉換為混亂格式。 在 SQL Server 2005 (9.x) 中,任何目錄檢視都無法直接看見混淆的輸出。 對系統資料表或資料庫檔案沒有存取權的使用者,將無法擷取模糊化的文字。 不過,可以透過 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 Table 系統資料表。

1 = True

0 = False
IsSystemVerified Object SQL Server 可以驗證物件的決定性和有效位數屬性。

1 = True

0 = False
IsTable Table 資料表。

1 = True

0 = False
IsTableFunction 函式 資料表值函式。

1 = 資料表值函式

0 = 非資料表值函式
IsTrigger 任何結構描述範圍物件 觸發程序。

1 = True

0 = False
IsUniqueCnst 任何結構描述範圍物件 UNIQUE 條件約束。

1 = True

0 = False
IsUserTable Table 使用者自訂資料表。

1 = True

0 = False
IsView 檢視 檢視表。

1 = True

0 = False
OwnerId 任何結構描述範圍物件 物件的擁有者。

注意: 結構描述擁有者不一定是物件擁有者。 例如,子物件 (其 parent_object_id 非 Null) 一律會傳回與父系相同的擁有者識別碼。

非 Null = 物件擁有者的資料庫使用者識別碼。
SchemaId 任何結構描述範圍物件 這是物件所屬結構描述的結構描述識別碼。
TableDeleteTrigger Table 資料表有 DELETE 觸發程序。

>1 = 具有指定類型之第一個觸發程序的識別碼。
TableDeleteTriggerCount Table 資料表有指定數目的 DELETE 觸發程序。

>0 = DELETE 觸發程序的數目。
TableFullTextMergeStatus Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

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

1 = 全文檢索索引正在合併。
TableFullTextBackgroundUpdateIndexOn Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

1 = TRUE

0 = FALSE
TableFulltextCatalogId Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

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

0 = 資料表沒有全文檢索索引。
TableFulltextChangeTrackingOn Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

1 = TRUE

0 = FALSE
TableFulltextDocsProcessed Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

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

> 0 = 下列其中之一 (A 或 B):A) 在啟動完整、累加或手動變更追蹤母體擴展之後,插入或更新作業所處理的文件數目。 B) 啟用含背景更新索引母體擴展的變更追蹤、變更全文檢索索引結構描述、重建全文檢索目錄,或重新啟動 SQL Server 執行個體等作業之後,插入或更新作業所處理的資料列數目。

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

這個屬性不會監視或計算已刪除的資料列。
TableFulltextFailCount Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

0 = 母體擴展已完成。

> 0 = 下列其中之一 (A 或 B):A) 啟動完整、累加或手動更新變更追蹤母體擴展之後,尚未建立索引的文件數目。 B) 對於背景更新索引的變更追蹤,在開始母體擴展或重新開始母體擴展之後,尚未建立索引的資料列數。 這可能是結構描述變更、重建目錄、伺服器重新啟動等所造成的。

NULL = 資料表沒有全文檢索索引。
TableFulltextItemCount Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

已順利建立全文檢索索引的資料列數。
TableFulltextKeyColumn Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

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

0 = 資料表沒有全文檢索索引。
TableFulltextPendingChanges Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

要處理的暫止變更追蹤項目數。

0 = 未啟用變更追蹤。

NULL = 資料表沒有全文檢索索引。
TableFulltextPopulateStatus Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

0 = 閒置。

1 = 完整母體擴展在進行中。

2 = 累加母體擴展在進行中。

3 = 追蹤變更的傳播在進行中。

4 = 背景更新索引在進行中,如自動變更追蹤。

5 = 全文檢索索引在調整執行速度或暫停。
TableHasActiveFulltextIndex Table 適用於:SQL Server 2008 (10.0.x) 和更新版本。

資料表有使用中的全文檢索索引。

1 = True

0 = False
TableHasCheckCnst Table 資料表有 CHECK 條件約束。

1 = True

0 = False
TableHasClustIndex Table 資料表有叢集索引。

1 = True

0 = False
TableHasDefaultCnst Table 資料表有 DEFAULT 條件約束。

1 = True

0 = False
TableHasDeleteTrigger Table 資料表有 DELETE 觸發程序。

1 = True

0 = False
TableHasForeignKey Table 資料表有 FOREIGN KEY 條件約束。

1 = True

0 = False
TableHasForeignRef Table 資料表由 FOREIGN KEY 條件約束參考。

1 = True

0 = False
TableHasIdentity Table 資料表有識別欄位。

1 = True

0 = False
TableHasIndex Table 資料表有任何類型的索引。

1 = True

0 = False
TableHasInsertTrigger Table 物件有 INSERT 觸發程序。

1 = True

0 = False
TableHasNonclustIndex Table 資料表有非叢集索引。

1 = True

0 = False
TableHasPrimaryKey Table 資料表有主索引鍵。

1 = True

0 = False
TableHasRowGuidCol Table 資料表有 uniqueidentifier 資料行的 ROWGUIDCOL。

1 = True

0 = False
TableHasTextImage Table 資料表有 textntextimage 資料行。

1 = True

0 = False
TableHasTimestamp Table 資料表有 timestamp 資料行。

1 = True

0 = False
TableHasUniqueCnst Table 資料表有 UNIQUE 條件約束。

1 = True

0 = False
TableHasUpdateTrigger Table 物件有 UPDATE 觸發程序。

1 = True

0 = False
TableHasVarDecimalStorageFormat Table 資料表可使用 vardecimal 儲存格式。

1 = True

0 = False
TableInsertTrigger Table 資料表有 INSERT 觸發程序。

>1 = 具有指定類型之第一個觸發程序的識別碼。
TableInsertTriggerCount Table 資料表有指定數目的 INSERT 觸發程序。

>0 = INSERT 觸發程序的數目。
TableIsFake Table 資料表不是真正的資料表。 SQL Server 資料庫引擎會依需求在內部具體化。

1 = True

0 = False
TableIsLockedOnBulkLoad Table 資料表因 bcp 或 BULK INSERT 作業而鎖定。

1 = True

0 = False
TableIsMemoryOptimized Table 適用於:SQL Server 2014 (12.x) 和更新版本。

資料表是記憶體最佳化的

1 = True

0 = False

基底資料類型:int

如需詳細資訊,請參閱 In-Memory OLTP (記憶體中最佳化)
TableIsPinned Table 資料表固定保留在資料快取中。

0 = False

SQL Server 2005 (9.x) 和更新版本中不支援此功能。
TableTextInRowLimit Table text in row 所允許的最大位元組數目。

如果未設定 text in row 選項,便是 0。
TableUpdateTrigger Table 資料表有 UPDATE 觸發程序。

> 1 = 具有指定類型之第一個觸發程序的識別碼。
TableUpdateTriggerCount Table 資料表有指定數目的 UPDATE 觸發程序。

> 0 = UPDATE 觸發程序的數目。
TableHasColumnSet Table 資料表有資料行集。

0 = False

1 = True

如需詳細資訊,請參閱 使用資料行集
TableTemporalType Table 適用於:SQL Server 2016 (13.x) 和更新版本。

指定資料表的類型。

0 = 非時態表

1 = 系統版本設定資料表的記錄資料表

2 = 系統版本設定的時態表

傳回型別

int

例外狀況

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

權限

使用者只能檢視使用者擁有或被授與某些權限之安全性實體的中繼資料。 這表示發出中繼資料的內建函數 (例如,OBJECTPROPERTY) 會在使用者不具有該物件任何權限時傳回 NULL。 如需相關資訊,請參閱 Metadata Visibility Configuration

備註

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

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

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

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

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

範例

A. 確認物件是資料表

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

USE AdventureWorks2022;  
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 AdventureWorks2022;  
GO  
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');  
GO  

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

-----  
0

C:尋找屬於特定結構描述的資料表

下列範例會傳回 dbo 結構描述中的所有資料表。

-- Uses AdventureWorks  
  
SELECT name, object_id, type_desc  
FROM sys.objects   
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
ORDER BY type_desc, name;  
GO  

範例:Azure Synapse Analytics 與 Analytics Platform System (PDW)

D:驗證物件是資料表

下列範例會測試 dbo.DimReseller 是否為 AdventureWorksPDW2022 資料庫中的資料表。

-- Uses AdventureWorks  
  
IF OBJECTPROPERTY (OBJECT_ID(N'dbo.DimReseller'),'ISTABLE') = 1  
   SELECT 'DimReseller is a table.'  
ELSE   
   SELECT 'DimReseller is not a table.';  
GO  

另請參閱

COLUMNPROPERTY (Transact-SQL)
中繼資料函數 (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)
sys.objects (Transact-SQL)