OBJECT_ID (Transact-SQL)
Возвращает идентификационный номер объекта базы данных для объекта области схемы.
Важно! |
---|
Запросы на объекты, не относящиеся к области схемы, например триггеры DDL, не могут выполняться с использованием OBJECT_ID. Для объектов, не найденных в представлении каталога sys.objects, идентификационный номер проставляется с помощью запроса к соответствующему представлению каталога. Например, чтобы получить идентификационный номер триггера DDL, используйте инструкцию SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'. |
Синтаксис
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]
object_name' [ ,'object_type' ] )
Аргументы
'object_name'
Объект, который будет использоваться. Аргумент object_name имеет тип varchar или nvarchar. Если аргумент object_name имеет тип varchar, он неявно преобразуется к типу nvarchar. Не обязательно указывать имена базы данных и схемы.'object_type'
Тип объекта области схемы. Аргумент object_type имеет тип varchar или nvarchar. Если аргумент object_type имеет тип varchar, он неявно преобразуется к типу nvarchar. Список объектов можно просмотреть в столбце type представления каталога sys.objects (Transact-SQL).
Типы возвращаемых данных
int
Исключения
Для пространственного индекса функция OBJECT_ID возвращает значение NULL.
В случае ошибки возвращает значение NULL.
Пользователь может просматривать только метаданные защищаемых объектов, которыми он владеет или на которые пользователю были предоставлены разрешения. Это означает, что встроенные функции, создающие метаданные, такие как OBJECT_ID, могут вернуть значение NULL в случае, если пользователь не имеет разрешений на объект. Дополнительные сведения см. в разделах Настройка видимости метаданных и Устранение неполадок, связанных с видимостью метаданных.
Замечания
Если параметр системной функции является необязательным, то предполагаются текущие база данных, компьютер размещения, пользователь сервера или пользователь базы данных. За встроенными функциями всегда должны следовать круглые скобки.
Если указано имя временной таблицы, то имя базы данных должно стоять перед именем временной таблицы, если только текущая база данных — не tempdb. Например: SELECT OBJECT_ID('tempdb..#mytemptable').
Системные функции можно использовать в списке выбора, в предложении WHERE и в любом месте, где разрешается использование выражений. Дополнительные сведения см. в разделах Выражения (Transact-SQL) и Предложение WHERE (Transact-SQL).
Примеры
А. Получение идентификатора указанного объекта
Следующий пример возвращает идентификатор объекта для таблицы Production.WorkOrder в базе данных База данных AdventureWorks2008R2.
USE master;
GO
SELECT OBJECT_ID(N'AdventureWorks2008R2.Production.WorkOrder') AS 'Object ID';
GO
Б. Проверка существования объекта
Следующий пример проверяет существование указанной таблицы, проверяя наличие у таблицы идентификатора объекта. Если таблица существует, то она удаляется. Если таблица не существует, то инструкция DROP TABLE не выполняется.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO
В. Использование функции OBJECT_ID для указания значения параметра системной функции
В следующем примере возвращаются сведения по всем индексам и секциям таблицы Person.Address в базе данных База данных AdventureWorks2008R2 с помощью функции sys.dm_db_index_operational_stats.
Важно! |
---|
При использовании для возврата значений параметров функций DB_ID и OBJECT_ID языка Transact-SQL необходимо убедиться в допустимости возвращаемого идентификатора. Если имя базы данных или объекта не может быть найдено, например если база данных или объект не существуют или неправильно записаны, то обе функции возвратят значение NULL. Функция sys.dm_db_index_operational_stats интерпретирует значение NULL как значение шаблона, указывающего все базы данных или все объекты. Так как эта операция может быть непреднамеренной, примеры в этом разделе демонстрируют безопасный способ определения идентификаторов базы данных и объекта. |
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(N'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.Person.Address');
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
END;
ELSE
BEGIN;
SELECT * FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO