Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Prüfen Sie mit OBJECTPROPERTY(), ob eine Tabelle eine DEFAULT-Einschränkung in SQL Server hat

Sie können die OBJECTPROPERTY() verwenden Funktion in SQL Server, um zu sehen, ob eine Tabelle eine DEFAULT-Einschränkung hat oder nicht.

Übergeben Sie dazu die Objekt-ID der Tabelle als erstes Argument und TableHasDefaultCnst als zweites Argument. Die Funktion gibt eine 1 zurück oder eine 0 abhängig davon, ob es eine DEFAULT-Beschränkung hat oder nicht.

Ein Rückgabewert von 1 bedeutet, dass die Tabelle eine DEFAULT-Einschränkung und einen Wert von 0 hat bedeutet, dass dies nicht der Fall ist.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein kurzes Beispiel zur Veranschaulichung.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Ergebnis:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 1                     |
+-----------------------+

In diesem Fall die WideWorldImportersDW Die Datenbank hat eine Tabelle mit der bereitgestellten ID und eine DEFAULT-Einschränkung.

Beispiel 2 – Abrufen der Objekt-ID

Wenn Sie den Namen der Tabelle kennen, aber nicht ihre ID, können Sie die OBJECT_ID() verwenden Funktion zum Abrufen der ID basierend auf ihrem Namen.

Beispiel:

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Ergebnis:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 1                     |
+-----------------------+

Dies ist das gleiche Objekt aus dem vorherigen Beispiel.

Hier wird nochmal mit der ID getrennt ausgegeben.

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

Ergebnis:

+-------------+-----------------------+
| Object ID   | TableHasDefaultCnst   |
|-------------+-----------------------|
| 1013578649  | 1                     |
+-------------+-----------------------+

Beispiel 3 – Wenn die Tabelle KEINE STANDARD-Einschränkung hat

Folgendes passiert, wenn die Tabelle keine DEFAULT-Einschränkung hat.

SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Ergebnis:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 0                     |
+-----------------------+

In diesem Fall ist das Objekt eine Tabelle, es hat nur keine DEFAULT-Einschränkung.

Beispiel 4 – Wenn das Objekt kein Tisch ist

Folgendes passiert, wenn die Datenbank ein Objekt mit der ID enthält, dieses Objekt jedoch keine Tabelle ist.

SELECT OBJECTPROPERTY(
    OBJECT_ID('Sequences.ReseedAllSequences'), 
    'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Ergebnis:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| NULL                  |
+-----------------------+

Beispiel 5 – Objekt existiert nicht

SQL Server geht davon aus, dass sich die Objekt-ID im aktuellen Datenbankkontext befindet. Wenn Sie eine Objekt-ID aus einer anderen Datenbank übergeben, erhalten Sie entweder ein NULL-Ergebnis oder falsche Ergebnisse.

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

Ergebnis:

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

In diesem Fall enthält die Datenbank keine Objekte mit diesem Namen oder dieser ID, und daher erhalte ich ein NULL-Ergebnis.

Sie erhalten auch NULL bei einem Fehler oder wenn Sie keine Berechtigung zum Anzeigen des Objekts haben.