Możesz użyć OBJECTPROPERTY()
funkcji w programie SQL Server, aby sprawdzić, czy tabela ma ograniczenie DOMYŚLNE.
Aby to zrobić, przekaż identyfikator obiektu tabeli jako pierwszy argument, a TableHasDefaultCnst
jako drugi argument. Funkcja zwraca 1
lub 0
w zależności od tego, czy ma ograniczenie DOMYŚLNE.
Zwracana wartość 1
oznacza, że tabela ma ograniczenie DEFAULT 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(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Wynik:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
W tym przypadku WideWorldImportersDW baza danych zawiera tabelę z podanym identyfikatorem i ma ograniczenie DOMYŚLNE.
Przykład 2 – Uzyskanie identyfikatora obiektu
Jeśli znasz nazwę tabeli, ale nie znasz jej identyfikatora, możesz użyć OBJECT_ID()
funkcja do pobrania identyfikatora na podstawie jego nazwy.
Przykład:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Wynik:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 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'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Wynik:
+-------------+-----------------------+ | Object ID | TableHasDefaultCnst | |-------------+-----------------------| | 1013578649 | 1 | +-------------+-----------------------+
Przykład 3 – Gdy tabela NIE ma DOMYŚLNEGO ograniczenia
Oto, co się dzieje, gdy tabela nie ma ograniczenia DEFAULT.
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Wynik:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 0 | +-----------------------+
W tym przypadku obiektem jest tabela, po prostu nie ma ograniczenia DOMYŚLNEGO.
Przykład 4 – Kiedy obiekt nie jest tabelą
Oto, co się dzieje, gdy baza danych zawiera obiekt z identyfikatorem, ale ten obiekt nie jest tabelą.
SELECT OBJECTPROPERTY( OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Wynik:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | NULL | +-----------------------+
Przykład 5 – 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'), 'TableHasDefaultCnst') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') 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.