OBJECTPROPERTY (Transact-SQL)
Изменения: 12 декабря 2006 г.
Возвращает данные об объектах области схемы в текущей базе данных. Список объектов области схемы см. в разделе sys.objects (Transact-SQL). Эта функция не может использоваться для объектов вне области схемы, таких как триггеры языка определения данных (DDL) и уведомления о событиях.
Синтаксические обозначения в Transact-SQL
Синтаксис
OBJECTPROPERTY ( id , property )
Аргументы
- id
Выражение, представляющее идентификатор объекта в текущей базе данных. Аргумент id имеет тип int. Предполагается, что он является объектом области схемы в контексте текущей базы данных.
property
Выражение, представляющее возвращаемые данные для объекта, определяемого id. Аргумент property может иметь одно из следующих значений.Примечание. Если не указано иное, значение 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 г. |
|
17 июля 2006 г. |
|
5 декабря 2005 г. |
|