OBJECTPROPERTY (Transact-SQL)

Изменения: 12 декабря 2006 г.

Возвращает данные об объектах области схемы в текущей базе данных. Список объектов области схемы см. в разделе sys.objects (Transact-SQL). Эта функция не может использоваться для объектов вне области схемы, таких как триггеры языка определения данных (DDL) и уведомления о событиях.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

OBJECTPROPERTY ( id , property ) 

Аргументы

  • id
    Выражение, представляющее идентификатор объекта в текущей базе данных. Аргумент id имеет тип int. Предполагается, что он является объектом области схемы в контексте текущей базы данных.
  • property
    Выражение, представляющее возвращаемые данные для объекта, определяемого id. Аргумент property может иметь одно из следующих значений.

    ms176105.note(ru-ru,SQL.90).gifПримечание.
    Если не указано иное, значение NULL возвращается в следующих случаях: если аргумент property не является допустимым именем свойства, если аргумент id не является допустимым идентификатором объекта, если аргумент id не является поддерживаемым типом объекта для указанного property или если вызывающая сторона не имеет разрешения на просмотр метаданных объекта.

    Имя свойства

Типы возвращаемых данных

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).

Примеры

А. Проверка того, что объект является таблицей

В следующем примере производится проверка, является ли 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

Б. Проверка того, что скалярная пользовательская функция является детерминированной

В следующем примере производится проверка, является ли пользовательская скалярная функция ufnGetProductDealerPrice, возвращающая значение money, детерминированной.

USE AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO

Результирующий набор показывает, что функция ufnGetProductDealerPrice не является детерминированной.

-----
0

В. Поиск объектов, принадлежащих определенной схеме

В следующем примере свойство 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

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлено свойство TableHasVarDecimalStorageFormat, доступное в пакете обновления 2 (SP2).

17 июля 2006 г.

Новое содержимое
  • Добавлен раздел «Исключения».

5 декабря 2005 г.

Измененное содержимое
  • Исправлено определение свойств IsTableFunction и IsScalarFunction.
  • Изменен пример В.