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.