sys.objects (Transact-SQL)

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

包含資料庫中所建立之每個使用者定義架構範圍對象的數據列,包括原生編譯的純量使用者定義函式。

如需詳細資訊,請參閱記憶體內部 OLTP 的純量使用者定義函數

注意

sys.objects 不會顯示 DDL 觸發程式,因為它們不是架構範圍。 在 sys.triggers 中找到所有觸發程式,包括 DML 和 DDL。 sys.triggers 支援各種觸發程式的名稱範圍規則混合。

資料行名稱 資料類型 描述
name sysname 物件名稱。
object_id int 物件標識碼。 在資料庫內是唯一的。
principal_id int 如果與架構擁有者不同,則為個別擁有者的標識符。 根據預設,架構自主物件是由架構擁有者所擁有。 不過,您可以使用 語句來變更擁有權,來指定 ALTER AUTHORIZATION 替代擁有者。

NULL 如果沒有替代的個別擁有者。

如果 NULL 物件類型是下列其中一個值,則為 :

C = 檢查條件約束
D = 預設 (條件約束或獨立)
F = 外鍵條件約束
PK = 主鍵條件約束
R = 規則(舊樣式,獨立)
TA = 元件 (CLR-integration) 觸發程式
TR = SQL 觸發程式
UQ = 唯一條件約束
EC = Edge 條件約束
schema_id int 物件所包含的架構標識碼。

架構範圍系統物件一律包含在 sys 或 INFORMATION_SCHEMA 架構中。
parent_object_id int 這個物件所屬之對象的標識碼。

0 = 不是子物件。
type char(2) 物件類型:

AF = 聚合函數 (CLR)
C = 檢查條件約束
D = 預設 (條件約束或獨立)
F = 外鍵條件約束
FN = SQL 純量函式
FS = Assembly (CLR) scalar-function
FT = Assembly (CLR) 資料表值函式
IF = SQL 內嵌資料表值函式 (TVF)
IT = 內部數據表
P = SQL 預存程式
PC = Assembly (CLR) 預存程式
PG = 計劃指南
PK = 主鍵條件約束
R = 規則(舊樣式,獨立)
RF = Replication-filter-procedure
S = 系統基表
SN = 同義字
SO = Sequence 物件
U = 資料表 (使用者定義)
V = 檢視

適用於:SQL Server 2012 (11.x) 和更新版本

SQ = 服務佇列
TA = 元件 (CLR) DML 觸發程式
TF = SQL table-valued-function (TVF)
TR = SQL DML 觸發程式
TT = 資料表類型
UQ = 唯一條件約束
X = 擴充預存程式

適用於:SQL Server 2014 (12.x) 和更新版本、Azure SQL 資料庫、Azure Synapse Analytics、Analytics Platform System (PDW)

ST = 統計數據樹狀結構

適用於:SQL Server 2016 (13.x) 和更新版本、Azure SQL 資料庫、Azure Synapse Analytics、Analytics Platform System (PDW)

ET = 外部數據表

適用於:SQL Server 2017 (14.x) 和更新版本、Azure SQL 資料庫、Azure Synapse Analytics、Analytics Platform System (PDW)

EC = Edge 條件約束
type_desc nvarchar(60) 物件類型的描述:

AGGREGATE_FUNCTION
CHECK_CONSTRAINT
CLR_SCALAR_FUNCTION
CLR_STORED_PROCEDURE
CLR_TABLE_VALUED_FUNCTION
CLR_TRIGGER
DEFAULT_CONSTRAINT
EDGE_CONSTRAINT
EXTENDED_STORED_PROCEDURE
FOREIGN_KEY_CONSTRAINT
INTERNAL_TABLE
PLAN_GUIDE
PRIMARY_KEY_CONSTRAINT
REPLICATION_FILTER_PROCEDURE
RULE
SEQUENCE_OBJECT
SERVICE_QUEUE
SQL_INLINE_TABLE_VALUED_FUNCTION
SQL_SCALAR_FUNCTION
SQL_STORED_PROCEDURE
SQL_TABLE_VALUED_FUNCTION
SQL_TRIGGER
SYNONYM
SYSTEM_TABLE
TYPE_TABLE
UNIQUE_CONSTRAINT
USER_TABLE
VIEW
create_date datetime 建立物件的日期。
modify_date datetime 上次使用 ALTER 語句修改物件的日期。 如果對象是數據表或檢視表,當數據表或檢視表上的索引建立或改變時,modify_date也會變更。
is_ms_shipped bit 物件是由內部 SQL Server 元件所建立。
is_published bit 對象已發行。
is_schema_published bit 只會發佈 對象的架構。

備註

您可以將OBJECT_ID、OBJECT_NAME和 OBJECTPROPERTY 內建函式套用至 中顯示的sys.objects物件。

此檢視的版本與顯示系統對象的架構相同,稱為 sys.system_objects。 另一個稱為 「sys.all_objects」的檢視會顯示系統和用戶物件。 這三個目錄檢視都有相同的結構。

在此版本的 SQL Server 中,擴充的索引,例如 XML 索引或空間索引,會被視為 中的 sys.objects 內部資料表(typeIT, 且 type_descINTERNAL_TABLE。 針對擴充索引:

  • name 是索引數據表的內部名稱
  • parent_object_idobject_id是基表的
  • is_ms_shippedis_published和資料 is_schema_published 行設定為 0

您可以使用特定物件類型的系統檢視來檢視物件的子集,例如:

權限

目錄檢視中元數據的可見度僅限於用戶擁有的安全性實體,或用戶獲授與某些許可權的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration

範例

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

執行下列查詢之前,請將 和 <n_days> 取代<database_name>為有效的值。

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. 傳回指定預存程式或函式的參數

執行下列查詢之前,請將 和 <schema_name.object_name> 取代<database_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
INNER JOIN sys.schemas AS s
    ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';
GO