Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dowiedz się, czy obiekt jest funkcją wartościującą tabelę w SQL Server za pomocą OBJECTPROPERTY()

Możesz użyć OBJECTPROPERTY() funkcji w SQL Server, aby sprawdzić, czy obiekt jest funkcją zwracającą tabelę, czy nie.

Aby to zrobić, przekaż identyfikator obiektu jako pierwszy argument, a IsTableFunction jako drugi argument. Funkcja zwraca 1 lub 0 w zależności od tego, czy jest to funkcja o wartościach w tabeli.

Zwracana wartość 1 oznacza, że ​​jest funkcja z wartościami tabeli i wartość 0 oznacza, że ​​tak nie jest.

Przykład 1 – Podstawowe użycie

Oto krótki przykład do zademonstrowania.

USE Music;
SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];

Wynik:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

W tym przypadku Muzyka baza danych zawiera obiekt o podanym identyfikatorze i jest to funkcja o wartościach w tabeli.

Przykład 2 – Uzyskanie identyfikatora obiektu

Jeśli znasz nazwę obiektu, ale nie znasz jego identyfikatora, możesz użyć OBJECT_ID() funkcja do pobrania identyfikatora na podstawie jego nazwy.

Przykład:

SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Wynik:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

Jest to ten sam obiekt z poprzedniego przykładu.

Tutaj znowu jest z wyjściem ID osobno.

SELECT 
  OBJECT_ID('ufn_AlbumsByGenre') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Wynik:

+-------------+-------------------+
| Object ID   | IsTableFunction   |
|-------------+-------------------|
| 34099162    | 1                 |
+-------------+-------------------+

Przykład 3 – gdy obiekt NIE jest funkcją o wartościach tabelarycznych

Oto, co się dzieje, gdy obiekt nie jest funkcją o wartościach w tabeli.

SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];

Wynik:

+-------------------+
| IsTableFunction   |
|-------------------|
| 0                 |
+-------------------+

W takim przypadku baza danych tak mam obiekt o tym identyfikatorze, ale obiekt jest w rzeczywistości tabelą użytkownika (nie funkcją z wartością w tabeli), więc otrzymuję wynik ujemny.

Tutaj znowu używamy OBJECT_ID() .

SELECT 
  OBJECT_ID('Artists') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];

Wynik:

+-------------+-------------------+---------------+
| Object ID   | IsTableFunction   | IsUserTable   |
|-------------+-------------------+---------------|
| 885578193   | 0                 | 1             |
+-------------+-------------------+---------------+

Sprawdziłem również, czy obiekt jest tabelą zdefiniowaną przez użytkownika i wynik jest pozytywny.

Przykład 4 – Obiekt nie istnieje

SQL Server zakłada, że ​​identyfikator obiektu znajduje się w bieżącym kontekście bazy danych. Jeśli przekażesz identyfikator obiektu z innej bazy danych, otrzymasz wynik NULL lub otrzymasz nieprawidłowe wyniki.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsTableFunction') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsTableFunction') AS [12345678];

Wynik:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

W tym przypadku baza danych nie zawiera obiektów o tej nazwie lub identyfikatorze, więc otrzymuję wynik NULL.

Otrzymasz również NULL w przypadku błędu lub braku uprawnień do przeglądania obiektu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować małe litery na wielkie w programie SQL Server — UPPER()

  2. Najlepszy sposób na uzyskanie PK Guid wstawionego wiersza

  3. Nie można zmniejszyć bazy danych „tylko do odczytu” | Zmniejsz dziennik transakcji podczas korzystania z grupy dostępności AlwaysOn

  4. Usuń konto pocztowe bazy danych w programie SQL Server (T-SQL)

  5. ExecuteScalar vs ExecuteNonQuery podczas zwracania wartości tożsamości