В SQL Server можете да използвате OBJECTPROPERTY()
функция за проверка на типа на обекта. По-конкретно, можете да проверите дали е или не е конкретен тип.
Например IsTable
свойството ви казва дали това е таблица или не, IsView
свойството ви казва дали това е изглед и т.н.
Тази статия предлага няколко основни примера, които проверяват дали даден обект е таблица, изглед, съхранена процедура или функция с стойност на таблица.
Пример 1 – Проверка за таблица
Ето пример, който проверява дали даден обект е таблица.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Резултат:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Тук името на обекта е Artists
и схемата е dbo
.
В този случай резултатът е 1
, което показва, че обектът всъщност е таблица.
Пример 2 – Проверка за изглед
Ето пример, който проверява дали даден обект е изглед.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Резултат:
+----------+ | IsView | |----------| | 0 | +----------+
В този случай проверявам същия обект от предишния пример и така вече знаем, че това не е изглед. Следователно резултатът е 0
, което показва, че това не е изглед.
Ето още един пример, този път обектът всъщност е изглед:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Резултат:
+----------+ | IsView | |----------| | 1 | +----------+
Имайте предвид, че премахнах USE Music;
част, защото вече съм в тази база данни. OBJECTPROPERTY()
проверява само обекти с обхват на схема в текущата база данни.
Пример 3 – Условно изявление
Можем да направим концепцията крачка напред и да включим предишните примери в IF
изявление. По този начин можем да изпълним един израз, за да разберем какъв тип е обектът.
По-долу са дадени основни примери, които просто извеждат типа обект.
Таблица
DECLARE @TheObject varchar(255) = 'dbo.Artists'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Резултат:
Table
В този случай обектът е таблица.
Ето още примери, които използват същия израз, но с различни типове обекти.
Преглед
DECLARE @TheObject varchar(255) = 'dbo.RockAlbums'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Резултат:
View
Запазена процедура
DECLARE @TheObject varchar(255) = 'dbo.uspGetAlbumsByArtist'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Резултат:
Stored Procedure
Функция с таблична стойност
DECLARE @TheObject varchar(255) = 'dbo.ufn_AlbumsByGenre1'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Резултат:
Table-valued Function
Можете да добавите повече типове към изявлението, за да го направите по-полезно. Изброих аргументите, които OBJECTPROPERTY()
приема на тази страница. Все пак не всички от тях са обекти – има много различни свойства, за които можете да проверите.
За пълно обяснение на всяко свойство вижте документацията на Microsoft.