Можете да използвате OBJECTPROPERTY()
функция в SQL Server, за да видите дали дадена таблица има или не ограничение ПО ПОДРАЗБИРАНЕ.
За да направите това, предайте идентификатора на обекта на таблицата като първи аргумент и TableHasDefaultCnst
като втори аргумент. Функцията връща 1
или 0
в зависимост от това дали има или не ограничение ПО ПОДРАЗБИРАНЕ.
Връщана стойност на 1
означава, че таблицата има ограничение по подразбиране и стойност 0
означава, че не е.
Пример 1 – Основна употреба
Ето един бърз пример за демонстрация.
ИЗПОЛЗВАЙТЕ WideWorldImportersDW;ИЗБЕРЕТЕ OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') КАТО [TableHasDefaultCnst];
Резултат:
<пред>+-----------------------+| TableHasDefaultCnst ||-----------------------|| 1 |+-----------------------+В този случай WideWorldImportersDW базата данни има таблица с предоставения идентификатор и има ограничение ПО ПОДРАЗБИРАНЕ.
Пример 2 – Получаване на идентификатора на обекта
Ако знаете името на таблицата, но не и нейния идентификатор, можете да използвате OBJECT_ID()
функция за извличане на идентификатора въз основа на неговото име.
Пример:
ИЗБЕРЕТЕ OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') КАТО [TableHasDefaultCnst];
Резултат:
<пред>+-----------------------+| TableHasDefaultCnst ||-----------------------|| 1 |+-----------------------+Това е същият обект от предишния пример.
Ето го отново с отделно извеждане на ID.
ИЗБЕРЕТЕ OBJECT_ID('Dimension.City') КАТО [ИД на обект], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') КАТО [TableHasDefaultCnst];
Резултат:
+------------+-----------------------+| ID на обекта | TableHasDefaultCnst ||------------+-----------------------|| 1013578649 | 1 |+------------+-----------------------+
Пример 3 – Когато таблицата НЯМА ограничение ПО ПОДРАЗБИРАНЕ
Ето какво се случва, когато таблицата няма ограничение ПО ПОДРАЗБИРАНЕ.
ИЗБЕРЕТЕ OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') КАТО [TableHasDefaultCnst];
Резултат:
<пред>+-----------------------+| TableHasDefaultCnst ||-----------------------|| 0 |+-----------------------+В този случай обектът е таблица, просто няма ограничение ПО ПОДРАЗБИРАНЕ.
Пример 4 – Когато обектът не е таблица
Ето какво се случва, когато базата данни съдържа обект с идентификатор, но този обект не е таблица.
ИЗБЕРЕТЕ OBJECTPROPERTY( OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasDefaultCnst') КАТО [TableHasDefaultCnst];
Резултат:
<пред>+-----------------------+| TableHasDefaultCnst ||-----------------------|| NULL |+-----------------------+Пример 5 – Обектът не съществува
SQL Server приема, че идентификаторът на обекта е в текущия контекст на базата данни. Ако подадете идентификатор на обект от друга база данни, или ще получите резултат NULL, или ще получите неправилни резултати.
ИЗБЕРЕТЕ OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasDefaultCnst') КАТО [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') КАТО [12345678];
Резултат:
+-----------------+-----------+| Невалиден обект | 12345678 ||----------------+------------|| NULL | NULL |+-----------------+-----------+
В този случай базата данни не съдържа обекти с това име или ID и така получавам резултат NULL.
Освен това ще получите NULL при грешка или ако нямате разрешение да видите обекта.