Поделиться через


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 = триггер DML сборки (среда CLR)

TF = возвращающая табличное значение функция SQL

TR = триггер DML SQL

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

Опубликована только схема объекта.

Замечания

Встроенные функции OBJECT_ID, OBJECT_NAME и OBJECTPROPERTY() можно применить к объектам, содержащимся в представлении sys.objects.

Существует версия этого представления с той же самой схемой, с именем 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 и более поздних версиях видимость метаданных в представлениях каталогов ограничивается защищаемыми объектами, которыми пользователь владеет или на которые ему были предоставлены разрешения. Дополнительные сведения см. в разделе Настройка видимости метаданных.

Примеры

А. Возвращение всех объектов, измененных в течение последних 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

Б. Возвращение параметров для указанной хранимой процедуры или функции

Перед запуском следующего запроса замените <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

В. Возвращение всех определяемых пользователем функций в базе данных

Перед запуском следующего запроса замените <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

Г. Возвращения владельца каждого объекта в схеме

Перед запуском следующего запроса замените все экземпляры <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