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

Dowiedz się, czy obiekt jest tabelą zdefiniowaną przez użytkownika w SQL Server za pomocą OBJECTPROPERTY()

Możesz użyć OBJECTPROPERTY() funkcji w SQL Server, aby sprawdzić, czy obiekt jest tabelą zdefiniowaną przez użytkownika, czy nie.

Aby to zrobić, przekaż identyfikator obiektu jako pierwszy argument, a IsUserTable jako drugi argument. Funkcja zwraca 1 lub 0 w zależności od tego, czy jest to tabela zdefiniowana przez użytkownika.

Zwracana wartość 1 oznacza, że ​​jest tabela zdefiniowana przez użytkownika i wartość 0 oznacza, że ​​tak nie jest.

Przykład 1 – Podstawowe użycie

Oto krótki przykład do zademonstrowania.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') AS [IsUserTable];

Wynik:

+---------------+
| IsUserTable   |
|---------------|
| 1             |
+---------------+

W tym przypadku WideWorldImportersDW baza danych zawiera obiekt z podanym identyfikatorem i jest to tabela zdefiniowana przez użytkownika.

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('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Wynik:

+---------------+
| IsUserTable   |
|---------------|
| 1             |
+---------------+

Jest to ten sam obiekt z poprzedniego przykładu.

Tutaj znowu jest z wyjściem ID oddzielnie.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Wynik:

+-------------+---------------+
| Object ID   | IsUserTable   |
|-------------+---------------|
| 1013578649  | 1             |
+-------------+---------------+

Przykład 3 – gdy obiekt NIE jest tabelą zdefiniowaną przez użytkownika

Oto, co się dzieje, gdy obiekt nie jest tabelą użytkownika.

SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];

Wynik:

+---------------+
| IsUserTable   |
|---------------|
| 0             |
+---------------+

W takim przypadku baza danych tak mam obiekt o tym identyfikatorze, ale obiekt jest w rzeczywistości procedurą składowaną (nie tabelą zdefiniowaną przez użytkownika), więc otrzymuję wynik negatywny.

Tutaj znowu używamy OBJECT_ID() .

SELECT 
  OBJECT_ID('Sequences.ReseedAllSequences') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable],
  OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsProcedure') AS [IsProcedure];

Wynik:

+-------------+---------------+---------------+
| Object ID   | IsUserTable   | IsProcedure   |
|-------------+---------------+---------------|
| 402100473   | 0             | 1             |
+-------------+---------------+---------------+

Sprawdziłem również, czy obiekt jest procedurą składowaną 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'), 'IsUserTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsUserTable') 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. CONVERT() w SQL Server

  2. Co to jest jednostka DTU w Azure SQL Database i jak określić, ile potrzebujemy

  3. Użycie programu SQL Server sp_msforeachtable, aby wybrać tylko te tabele, które spełniają określone warunki

  4. Jak usunąć przy użyciu INNER JOIN w programie SQL Server?

  5. Dlaczego moje połączenie ODBC kończy się niepowodzeniem podczas uruchamiania ładowania SSIS w programie Visual Studio, ale nie podczas uruchamiania tego samego pakietu przy użyciu narzędzia Wykonaj pakiet