適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
傳回目前資料庫中結構描述範圍物件的相關資訊。 如需結構描述範圍物件的清單,請參閱 sys.objects (Transact-SQL) (部分機器翻譯)。 不是以結構描述為範圍的物件,如資料定義語言 (DDL) 觸發程序和事件通知,無法使用這項功能。
Transact-SQL 語法慣例 (部分機器翻譯)
語法
OBJECTPROPERTY ( ID , property )
引數
識別碼
表示式,代表目前資料庫中物件的識別碼。 ID 為 int ,並假設是目前資料庫內容中的綱目範圍物件。
property
表示要針對 ID 指定的物件傳回資訊的運算式。 屬性 可以是下列其中一個值。
注意
除非另有說明,否則當 NULL屬性 不是有效的屬性名稱、 識別碼 不是有效的物件識別碼、 識別碼 是指定 屬性不支援的物件類型,或呼叫端沒有檢視物件中繼資料的許可權時,會傳回。
| 屬性名稱 | 物件類型 | 描述和傳回的值 |
|---|---|---|
CnstIsClustKey |
條件約束 |
PRIMARY KEY 條件約束與叢集索引。1 = 正確 0 = 錯誤 |
CnstIsColumn |
條件約束 |
CHECK、 DEFAULT或 FOREIGN KEY 限制。1 = 正確 0 = 錯誤 |
CnstIsDeleteCascade |
條件約束 |
FOREIGN KEY constraint 與選項 ON DELETE CASCADE 。1 = 正確 0 = 錯誤 |
CnstIsDisabled |
條件約束 | 停用的條件約束。 1 = 正確 0 = 錯誤 |
CnstIsNonclustKey |
條件約束 |
PRIMARY KEY 或 UNIQUE 具有非叢集索引的條件約束。1 = 正確 0 = 錯誤 |
CnstIsNotRepl |
條件約束 | 條件約束是使用關鍵字來 NOT FOR REPLICATION 定義。1 = 正確 0 = 錯誤 |
CnstIsNotTrusted |
條件約束 | 已啟用限制,但未檢查現有列;因此,限制可能不適用於所有列。 1 = 正確 0 = 錯誤 |
CnstIsUpdateCascade |
條件約束 |
FOREIGN KEY constraint 與選項 ON UPDATE CASCADE 。1 = 正確 0 = 錯誤 |
ExecIsAfterTrigger |
觸發程序 |
AFTER 鉷。1 = 正確 0 = 錯誤 |
ExecIsAnsiNullsOn |
Transact-SQL 函式、Transact-SQL 程序、Transact-SQL 觸發程序、檢視 | 建立時的 ANSI_NULLS 設定。1 = 正確 0 = 錯誤 |
ExecIsDeleteTrigger |
觸發程序 |
DELETE 鉷。1 = 正確 0 = 錯誤 |
ExecIsFirstDeleteTrigger |
觸發程序 | 針對資料表執行 a DELETE 時觸發的第一個觸發程式。1 = 正確 0 = 錯誤 |
ExecIsFirstInsertTrigger |
觸發程序 | 針對資料表執行時 INSERT 觸發的第一個觸發程式。1 = 正確 0 = 錯誤 |
ExecIsFirstUpdateTrigger |
觸發程序 | 針對資料表執行時 UPDATE 觸發的第一個觸發程式。1 = 正確 0 = 錯誤 |
ExecIsInsertTrigger |
觸發程序 |
INSERT 鉷。1 = 正確 0 = 錯誤 |
ExecIsInsteadOfTrigger |
觸發程序 |
INSTEAD OF 鉷。1 = 正確 0 = 錯誤 |
ExecIsLastDeleteTrigger |
觸發程序 | 針對資料表執行 a DELETE 時觸發的最後一個觸發程式。1 = 正確 0 = 錯誤 |
ExecIsLastInsertTrigger |
觸發程序 | 針對資料表執行時 INSERT 觸發的最後一個觸發程式。1 = 正確 0 = 錯誤 |
ExecIsLastUpdateTrigger |
觸發程序 | 針對資料表執行時 UPDATE 觸發的最後一個觸發程式。1 = 正確 0 = 錯誤 |
ExecIsQuotedIdentOn |
Transact-SQL 函式、Transact-SQL 程序、Transact-SQL 觸發程序、檢視 | 建立時的 QUOTED_IDENTIFIER 設定。1 = 正確 0 = 錯誤 |
ExecIsStartup |
程序 | 啟動程序。 1 = 正確 0 = 錯誤 |
ExecIsTriggerDisabled |
觸發程序 | 停用的觸發程序。 1 = 正確 0 = 錯誤 |
ExecIsTriggerNotForRepl |
觸發程序 | 觸發器定義為 NOT FOR REPLICATION。1 = 正確 0 = 錯誤 |
ExecIsUpdateTrigger |
觸發程序 |
UPDATE 鉷。1 = 正確 0 = 錯誤 |
ExecIsWithNativeCompilation |
Transact-SQL 程序 |
適用於:SQL Server 2014 (12.x) 和更新版本。 此為原生編譯的程序。 1 = 正確 0 = 錯誤 基底資料類型:int |
HasAfterTrigger |
表格或視圖 | 資料表或檢視具有 AFTER 觸發程式。1 = 正確 0 = 錯誤 |
HasDeleteTrigger |
表格或視圖 | 資料表或檢視具有 DELETE 觸發程式。1 = 正確 0 = 錯誤 |
HasInsertTrigger |
表格或視圖 | 資料表或檢視具有 INSERT 觸發程式。1 = 正確 0 = 錯誤 |
HasInsteadOfTrigger |
表格或視圖 | 資料表或檢視具有 INSTEAD OF 觸發程式。1 = 正確 0 = 錯誤 |
HasUpdateTrigger |
表格或視圖 | 資料表或檢視具有 UPDATE 觸發程式。1 = 正確 0 = 錯誤 |
IsAnsiNullsOn |
Transact-SQL 函式、Transact-SQL 程序、資料表、Transact-SQL 觸發程序、檢視 |
ANSI NULLS指定表格的選項設定為 ON。 當 ANSI NULLS 是 時,所有與值ON的比較都會評估為 NULLUNKNOWN。 只要資料表存在,這項設定便適用於資料表定義中的所有運算式,其中包括計算資料行和條件約束。1 = 正確 0 = 錯誤 |
IsCheckCnst |
任何結構描述範圍物件 |
CHECK 約束。1 = 正確 0 = 錯誤 |
IsConstraint |
任何結構描述範圍物件 | 是單個直欄 CHECK、 DEFAULT或 FOREIGN KEY 直欄或表格上的限制。1 = 正確 0 = 錯誤 |
IsDefault |
任何結構描述範圍物件 |
適用於:SQL Server 2008 (10.0.x) 和更新版本。 繫結預設值。 1 = 正確 0 = 錯誤 |
IsDefaultCnst |
任何結構描述範圍物件 |
DEFAULT 約束。1 = 正確 0 = 錯誤 |
IsDeterministic |
功能或視圖 | 函數或檢視表的決定性屬性。 1 = 具有決定性 0 = 不具決定性 |
IsEncrypted |
Transact-SQL 函式、Transact-SQL 程序、資料表、Transact-SQL 觸發程序、檢視 | 指出此模組陳述式的原始文字已轉換為混亂格式。 在 SQL Server 2005 (9.x) 中,任何目錄檢視都無法直接看見混淆的輸出。 對系統資料表或資料庫檔案沒有存取權的使用者,將無法擷取模糊化的文字。 不過,文字可供使用者使用,這些使用者可以透過 資料庫管理者的「診斷」連線 存取系統表格,或直接存取資料庫檔案。 另外,可將偵錯工具附加至伺服器處理序的使用者,可以在執行階段從記憶體擷取原始程序。 1 = 已加密 0 = 未加密 基底資料類型:int |
IsExecuted |
任何結構描述範圍物件 | 可以執行物件 (檢視、程序、函數或觸發程序)。 1 = 正確 0 = 錯誤 |
IsExtendedProc |
任何結構描述範圍物件 | 擴充程序。 1 = 正確 0 = 錯誤 |
IsForeignKey |
任何結構描述範圍物件 |
FOREIGN KEY 約束。1 = 正確 0 = 錯誤 |
IsIndexed |
表格或視圖 | 有索引的資料表或檢視。 1 = 正確 0 = 錯誤 |
IsIndexable |
表格或視圖 | 可以建立索引的資料表或檢視。 1 = 正確 0 = 錯誤 |
IsInlineFunction |
函式 | 內嵌函數。 1 = 內嵌函數 0 = 非內嵌函數 |
IsMSShipped |
任何結構描述範圍物件 | 在安裝 SQL Server 期間所建立的物件。 1 = 正確 0 = 錯誤 |
IsPrimaryKey |
任何結構描述範圍物件 |
PRIMARY KEY 約束。1 = 正確 0 = 錯誤 NULL = 不是函數,或物件 ID 無效。 |
IsProcedure |
任何結構描述範圍物件 | 程序。 1 = 正確 0 = 錯誤 |
IsQuotedIdentOn |
Transact-SQL 函數、Transact-SQL 程序、表格、Transact-SQL 觸發器、視圖、 CHECK 約束、 DEFAULT 定義 |
指定物件的引號識別碼設定為 ON。 這表示用雙引號來分隔物件定義所涉及的所有運算式中之識別碼。1 = ON0 = OFF |
IsQueue |
任何結構描述範圍物件 | Service Broker 佇列 1 = 正確 0 = 錯誤 |
IsReplProc |
任何結構描述範圍物件 | 複寫程序。 1 = 正確 0 = 錯誤 |
IsRule |
任何結構描述範圍物件 | 繫結規則。 1 = 正確 0 = 錯誤 |
IsScalarFunction |
函式 | 純量值函式。 1 = 純量值函式 0 = 非純量值函式 |
IsSchemaBound |
功能或視圖 | 使用 建立 SCHEMABINDING的綱目繫結函式或檢視。1 = 結構描述繫結 0 = 非結構描述繫結。 |
IsSystemTable |
Table | 系統資料表。 1 = 正確 0 = 錯誤 |
IsSystemVerified |
Object | SQL Server 可以驗證物件的決定性和有效位數屬性。 1 = 正確 0 = 錯誤 |
IsTable |
Table | 資料表。 1 = 正確 0 = 錯誤 |
IsTableFunction |
函式 | 資料表值函式。 1 = 資料表值函式 0 = 非資料表值函式 |
IsTrigger |
任何結構描述範圍物件 | 觸發程序。 1 = 正確 0 = 錯誤 |
IsUniqueCnst |
任何結構描述範圍物件 |
UNIQUE 約束。1 = 正確 0 = 錯誤 |
IsUserTable |
Table | 使用者自訂資料表。 1 = 正確 0 = 錯誤 |
IsView |
檢視 | 檢視表。 1 = 正確 0 = 錯誤 |
OwnerId |
任何結構描述範圍物件 | 物件的擁有者。 注意: 結構描述擁有者不一定是物件擁有者。 例如,子物件 ( parent_object_id 為非 Null 的物件) 一律會傳回與父物件相同的擁有者識別碼。 非空值 = 物件擁有者的資料庫使用者 ID。 |
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 = 真 0 = 錯誤 |
TableFulltextCatalogId |
Table |
適用於:SQL Server 2008 (10.0.x) 和更新版本。 資料表的全文檢索索引資料所在的全文檢索目錄識別碼。 非零 = 全文檢索目錄識別碼,關聯於用來識別全文檢索索引資料表中的資料列之唯一索引。 0 = 資料表沒有全文檢索索引。 |
TableFulltextChangeTrackingOn |
Table |
適用於:SQL Server 2008 (10.0.x) 和更新版本。 資料表啟用全文檢索變更追蹤。 1 = 真 0 = 錯誤 |
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 = 正確 0 = 錯誤 |
TableHasCheckCnst |
Table | 表格有條件 CHECK 約束。1 = 正確 0 = 錯誤 |
TableHasClustIndex |
Table | 資料表有叢集索引。 1 = 正確 0 = 錯誤 |
TableHasDefaultCnst |
Table | 表格有條件 DEFAULT 約束。1 = 正確 0 = 錯誤 |
TableHasDeleteTrigger |
Table | 表格有觸發 DELETE 器。1 = 正確 0 = 錯誤 |
TableHasForeignKey |
Table | 表格有條件 FOREIGN KEY 約束。1 = 正確 0 = 錯誤 |
TableHasForeignRef |
Table | 表格由條件約束參考 FOREIGN KEY 。1 = 正確 0 = 錯誤 |
TableHasIdentity |
Table | 資料表有識別欄位。 1 = 正確 0 = 錯誤 |
TableHasIndex |
Table | 資料表有任何類型的索引。 1 = 正確 0 = 錯誤 |
TableHasInsertTrigger |
Table | 物件具有觸發 INSERT 器。1 = 正確 0 = 錯誤 |
TableHasNonclustIndex |
Table | 資料表有非叢集索引。 1 = 正確 0 = 錯誤 |
TableHasPrimaryKey |
Table | 資料表有主索引鍵。 1 = 正確 0 = 錯誤 |
TableHasRowGuidCol |
Table | 表格具有 ROWGUIDCOLuniqueidentifier 資料行。1 = 正確 0 = 錯誤 |
TableHasTextImage |
Table | 資料表有 text、ntext 或 image 資料行。 1 = 正確 0 = 錯誤 |
TableHasTimestamp |
Table | 資料表有 timestamp 資料行。 1 = 正確 0 = 錯誤 |
TableHasUniqueCnst |
Table | 表格有條件 UNIQUE 約束。1 = 正確 0 = 錯誤 |
TableHasUpdateTrigger |
Table | 物件具有觸發 UPDATE 器。1 = 正確 0 = 錯誤 |
TableHasVarDecimalStorageFormat |
Table | 資料表可使用 vardecimal 儲存格式。 1 = 正確 0 = 錯誤 |
TableInsertTrigger |
Table | 表格有觸發 INSERT 器。>1 = 具有指定類型之第一個觸發程序的識別碼。 |
TableInsertTriggerCount |
Table | 表格具有指定數目 INSERT 的觸發程式。>0 = 觸發器數 INSERT 。 |
TableIsFake |
Table | 資料表不是真正的資料表。 SQL Server 資料庫引擎會依需求在內部具體化。 1 = 正確 0 = 錯誤 |
TableIsLockedOnBulkLoad |
Table | 資料表因 bcp 或 BULK INSERT 作業而鎖定。1 = 正確 0 = 錯誤 |
TableIsMemoryOptimized |
Table |
適用於:SQL Server 2014 (12.x) 和更新版本。 資料表是記憶體最佳化的 1 = 正確 0 = 錯誤 基底資料類型:int 如需詳細資訊,請參閱 In-Memory OLTP 概觀和使用案例。 |
TableIsPinned |
Table | 資料表固定保留在資料快取中。 0 = 錯誤 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 = 錯誤 1 = 正確 如需詳細資訊,請參閱 使用資料行集。 |
TableTemporalType |
Table |
適用於:SQL Server 2016 (13.x) 和更新版本。 指定資料表的類型。 0 = 非時態表 1 = 系統版本設定資料表的記錄資料表 2 = 系統版本設定的時態表 |
傳回類型
int
例外狀況
發生錯誤或呼叫端沒有檢視物件的許可權時傳回 NULL 。
權限
使用者只能檢視使用者擁有或被授與某些權限之安全性實體的中繼資料。 這表示中繼資料發出的內建函式,例如 OBJECTPROPERTY 如果使用者對物件沒有任何許可權,則會返回 NULL 。 如需詳細資訊,請參閱中 繼資料可見度設定。
備註
資料庫引擎假設 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') 律會傳回 (true) 的 1 值。
範例
A. 確認物件是資料表
下列範例會測試 UnitMeasure 是否為 AdventureWorks2025 資料庫中的資料表。
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 schema_name(o.schema_id), o.name, o.object_id, o.type_desc
FROM sys.objects AS o
WHERE OBJECTPROPERTY(o.object_id, N'SchemaId') = SCHEMA_ID(N'dbo')
ORDER BY o.type_desc, o.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