W SQL Server możesz użyć OBJECTPROPERTY()
funkcja sprawdzania typu obiektu. Dokładniej, możesz sprawdzić, czy jest to określony typ.
Na przykład IsTable
Właściwość informuje, czy jest to tabela, IsView
właściwość informuje, czy jest to widok itp.
W tym artykule przedstawiono kilka podstawowych przykładów sprawdzających, czy obiekt jest tabelą, widokiem, procedurą składowaną lub funkcją z wartością przechowywaną w tabeli.
Przykład 1 – Sprawdź tabelę
Oto przykład, który sprawdza, czy obiekt jest tabelą.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Wynik:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Tutaj nazwa obiektu to Artists
a schemat to dbo
.
W tym przypadku wynikiem jest 1
, co wskazuje, że obiekt jest w rzeczywistości tabelą.
Przykład 2 – Sprawdź widok
Oto przykład, który sprawdza, czy obiekt jest widokiem.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Wynik:
+----------+ | IsView | |----------| | 0 | +----------+
W tym przypadku sprawdzam ten sam obiekt z poprzedniego przykładu, więc już wiemy, że to nie jest widok. Dlatego wynik to 0
, co oznacza, że nie jest to widok.
Oto kolejny przykład, tym razem obiekt jest w rzeczywistości widokiem:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Wynik:
+----------+ | IsView | |----------| | 1 | +----------+
Zauważ, że usunąłem USE Music;
część, ponieważ jestem już w tej bazie danych. OBJECTPROPERTY()
sprawdza tylko obiekty o zakresie schematu w bieżącej bazie danych.
Przykład 3 – Instrukcja warunkowa
Możemy pójść o krok dalej i włączyć poprzednie przykłady do IF
oświadczenie. W ten sposób możemy uruchomić pojedynczą instrukcję, aby dowiedzieć się, jakiego typu jest obiekt.
Poniżej znajdują się podstawowe przykłady, które po prostu wyświetlają typ obiektu.
Tabela
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.';
Wynik:
Table
W tym przypadku obiektem jest stół.
Oto więcej przykładów, w których użyto tej samej instrukcji, ale z różnymi typami obiektów.
Wyświetl
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.';
Wynik:
View
Procedura przechowywana
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.';
Wynik:
Stored Procedure
Funkcja o wartościach tabeli
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.';
Wynik:
Table-valued Function
Możesz dodać więcej typów do instrukcji, aby była bardziej użyteczna. Wymieniłem argumenty, które OBJECTPROPERTY()
akceptuje na tej stronie. Nie wszystkie z nich są jednak typami obiektów – istnieje wiele różnych właściwości, które możesz sprawdzić.
Pełne wyjaśnienie każdej właściwości znajduje się w dokumentacji firmy Microsoft.