sys.objects (Transact-SQL)

針對在資料庫內建立的每個使用者自訂結構描述範圍的物件,各包含一個資料列。

[!附註]

sys.objects 不顯示 DDL 觸發程序,因為它們不是以結構描述為範圍。包括 DML 和 DDL 在內的所有觸發程序都可以在 sys.triggers 中找到。sys.triggers 支援各種觸發程序種類的混合名稱範圍規則。

資料行名稱

資料類型

描述

name

sysname

物件名稱。

object_id

int

物件識別碼。在資料庫中,這是唯一的。

principal_id

int

如果個別擁有者不是結構描述擁有者,這便是個別擁有者的識別碼。依預設,結構描述包含的物件就是結構描述擁有者所擁有的物件。不過,您也可以利用 ALTER AUTHORIZATION 陳述式來變更擁有權,指定替代的擁有者。

如果沒有替代的個別擁有者,這便是 NULL。

如果物件類型是下列其中一項,便是 NULL:

C = CHECK 條件約束

D = DEFAULT (條件約束或獨立式)

F = FOREIGN KEY 條件約束

PK = PRIMARY KEY 條件約束

R = 規則 (舊式、獨立式)

TA = 組件 (CLR 整合) 觸發程序

TR = SQL 觸發程序

UQ = UNIQUE 條件約束

schema_id

int

物件所在的結構描述識別碼。

結構描述範圍的系統物件永遠包含在 sys 或 INFORMATION_SCHEMA 結構描述中。

parent_object_id

int

這個物件所屬的物件識別碼。

0 = 不是子物件。

type

char(2)

物件類型:

AF = 彙總函式 (CLR)

C = CHECK 條件約束

D = DEFAULT (條件約束或獨立式)

F = FOREIGN KEY 條件約束

FN = SQL 純量函數

FS = 組件 (CLR) 純量函數

FT = 組件 (CLR) 資料表值函式

IF = SQL 嵌入資料表值函式

IT = 內部資料表

P = SQL 預存程序

PC = 組件 (CLR) 預存程序

PG = 計畫指南

PK = PRIMARY KEY 條件約束

R = 規則 (舊式、獨立式)

RF = 複寫篩選程序

S = 系統基底資料表

SN = 同義字

SQ = 服務佇列

TA = 組件 (CLR) DML 觸發程序

TF = SQL 資料表值函式

TR = SQL DML 觸發程序

TT = 資料表類型

U = 資料表 (使用者定義)

UQ = UNIQUE 條件約束

V = 檢視

X = 擴充預存程序

type_desc

nvarchar(60)

物件類型的描述:

AGGREGATE_FUNCTION

CHECK_CONSTRAINT

DEFAULT_CONSTRAINT

FOREIGN_KEY_CONSTRAINT

SQL_SCALAR_FUNCTION

CLR_SCALAR_FUNCTION

CLR_TABLE_VALUED_FUNCTION

SQL_INLINE_TABLE_VALUED_FUNCTION

INTERNAL_TABLE

SQL_STORED_PROCEDURE

CLR_STORED_PROCEDURE

PLAN_GUIDE

PRIMARY_KEY_CONSTRAINT

RULE

REPLICATION_FILTER_PROCEDURE

SYSTEM_TABLE

SYNONYM

SERVICE_QUEUE

CLR_TRIGGER

SQL_TABLE_VALUED_FUNCTION

SQL_TRIGGER

TABLE_TYPE

USER_TABLE

UNIQUE_CONSTRAINT

VIEW

EXTENDED_STORED_PROCEDURE

create_date

datetime

物件的建立日期。

modify_date

datetime

上次利用 ALTER 陳述式來修改物件的日期。如果物件是資料表或檢視,當建立或變更資料表或檢視的叢集索引時,也會變更 modify_date。

is_ms_shipped

bit

物件是內部 SQL Server 元件所建立的。

is_published

bit

已發行物件。

is_schema_published

bit

僅發行物件的結構描述。

備註

您可以在 sys.objects 所顯示的物件上,套用 OBJECT_IDOBJECT_NAMEOBJECTPROPERTY() 內建函數。

這份檢視有一個含相同結構描述的版本,稱為 sys.system_objects,它會顯示系統物件。另外,還有一個稱為 sys.all_objects 的檢視,它會顯示系統和使用者物件。這三個目錄檢視都有相同的結構。

在這一版 SQL Server 中,擴充索引 (例如 XML 索引或空間索引) 會視為 sys.objects 中的內部資料表 (type = IT 且 type_desc = INTERNAL_TABLE)。如果是擴充索引:

  • name 是索引資料表的內部名稱。

  • parent_object_id 是基底資料表的 object_id。

  • is_ms_shipped、is_published 和 is_schema_published 資料行設定為 0。

權限

在 SQL Server 2005 和更新的版本中,目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。如需詳細資訊,請參閱<中繼資料可見性組態>。

範例

A. 傳回在過去 N 天中修改過的所有物件

在您執行下列查詢之前,請使用有效的值取代 <database_name> 及 <n_days>。

USE <database_name>;
GO
SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - <n_days>
ORDER BY modify_date;
GO

B. 傳回指定之預存程序或函數的參數

在您執行下列查詢之前,請使用有效的名稱取代 <database_name> 及 <schema_name.object_name>。

USE <database_name>;
GO
SELECT SCHEMA_NAME(schema_id) AS schema_name
    ,o.name AS object_name
    ,o.type_desc
    ,p.parameter_id
    ,p.name AS parameter_name
    ,TYPE_NAME(p.user_type_id) AS parameter_type
    ,p.max_length
    ,p.precision
    ,p.scale
    ,p.is_output
FROM sys.objects AS o
INNER JOIN sys.parameters AS p ON o.object_id = p.object_id
WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')
ORDER BY schema_name, object_name, p.parameter_id;
GO

C. 傳回資料庫中的所有使用者定義函數

在您執行下列查詢之前,請使用有效的資料庫名稱取代 <database_name>。

USE <database_name>;
GO
SELECT name AS function_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';
GO

D. 傳回結構描述中每個物件的擁有者。

在您執行下列查詢之前,請使用有效的名稱取代所有 <database_name> 及 <schema_name>。

USE <database_name>;
GO
SELECT 'OBJECT' AS entity_type
    ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
    ,name 
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION 
SELECT 'TYPE' AS entity_type
    ,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name
    ,name 
FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>' 
UNION
SELECT 'XML SCHEMA COLLECTION' AS entity_type 
    ,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name
    ,xsc.name 
FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s
    ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';
GO