OBJECTPROPERTY (Transact-SQL)

更新: 2006 年 12 月 12 日

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

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

語法

OBJECTPROPERTY ( id , property ) 

引數

  • id
    這是代表目前資料庫中之物件識別碼的運算式。idint,假設為在目前資料庫內容中以結構描述為範圍的物件。
  • property
    這是代表 id 指定的物件之傳回資訊的運算式。property 可以是下列值之一。

    ms176105.note(zh-tw,SQL.90).gif附註:
    除非另有說明,否則,當 property 不是有效屬性的名稱、id 不是有效的物件識別碼、id 不是指定 property 所支援的物件類型,或呼叫者沒有檢視物件中繼資料的權限時,便傳回 NULL。

    屬性名稱

傳回類型

int

例外

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

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

備註

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

USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.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 是否為 AdventureWorks 資料庫中的資料表。

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

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

-----
0

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

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

USE AdventureWorks;
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

請參閱

參考

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

其他資源

使用者結構描述分隔

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

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

2006 年 7 月 17 日

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

2005 年 12 月 5 日

變更的內容:
  • 更正 IsTableFunctionIsScalarFunction 屬性的定義。
  • 修改範例 C。