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_ID、OBJECT_NAME 和 OBJECTPROPERTY() 內建函數。
這份檢視有一個含相同結構描述的版本,稱為 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。
範例
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