Можете да използвате OBJECTPROPERTY()
функция в SQL Server, за да провери дали даден обект е функция с таблично значение или не.
За да направите това, предайте идентификатора на обекта като първи аргумент и IsTableFunction
като втори аргумент. Функцията връща 1
или 0
в зависимост от това дали е функция с таблично значение.
Връщана стойност на 1
означава, че е функция с таблична стойност и стойност 0
означава, че не е.
Пример 1 – Основна употреба
Ето един бърз пример за демонстрация.
USE Music; SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];
Резултат:
+-------------------+ | IsTableFunction | |-------------------| | 1 | +-------------------+
В този случай Музика базата данни има обект с предоставения идентификатор и е функция с таблично значение.
Пример 2 – Получаване на идентификатора на обекта
Ако знаете името на обекта, но не и неговия идентификатор, можете да използвате OBJECT_ID()
функция за извличане на идентификатора въз основа на неговото име.
Пример:
SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];
Резултат:
+-------------------+ | IsTableFunction | |-------------------| | 1 | +-------------------+
Това е същият обект от предишния пример.
Ето го отново с отделно извеждане на ID.
SELECT OBJECT_ID('ufn_AlbumsByGenre') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];
Резултат:
+-------------+-------------------+ | Object ID | IsTableFunction | |-------------+-------------------| | 34099162 | 1 | +-------------+-------------------+
Пример 3 – Когато обектът НЕ е функция с таблично стойност
Ето какво се случва, когато обектът не е функция с таблична стойност.
SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];
Резултат:
+-------------------+ | IsTableFunction | |-------------------| | 0 | +-------------------+
В този случай базата данни прави имам обект с този идентификатор, но обектът всъщност е потребителска таблица (не функция с стойност на таблица), така че получавам отрицателен резултат.
Тук отново се използва OBJECT_ID()
.
SELECT OBJECT_ID('Artists') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction], OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];
Резултат:
+-------------+-------------------+---------------+ | Object ID | IsTableFunction | IsUserTable | |-------------+-------------------+---------------| | 885578193 | 0 | 1 | +-------------+-------------------+---------------+
Проверих също дали обектът е дефинирана от потребителя таблица и резултатът е положителен.
Пример 4 – Обектът не съществува
SQL Server приема, че идентификаторът на обекта е в текущия контекст на базата данни. Ако подадете идентификатор на обект от друга база данни, или ще получите резултат NULL, или ще получите неправилни резултати.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsTableFunction') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsTableFunction') AS [12345678];
Резултат:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
В този случай базата данни не съдържа обекти с това име или ID и така получавам резултат NULL.
Освен това ще получите NULL при грешка или ако нямате разрешение да видите обекта.