Du kan använda OBJECTPROPERTY()
funktion i SQL Server för att se om en tabell har en DEFAULT-begränsning eller inte.
För att göra detta, skicka tabellens objekt-ID som det första argumentet och TableHasDefaultCnst
som det andra argumentet. Funktionen returnerar en 1
eller en 0
beroende på om den har en DEFAULT-begränsning eller inte.
Ett returvärde på 1
betyder att tabellen har en DEFAULT-begränsning och ett värde på 0
betyder att det inte är det.
Exempel 1 – Grundläggande användning
Här är ett snabbt exempel att visa.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
I det här fallet, WideWorldImportersDW databasen har en tabell med det angivna ID, och den har en DEFAULT-begränsning.
Exempel 2 – Hämta objekt-ID
Om du känner till tabellens namn, men inte dess ID, kan du använda OBJECT_ID()
funktion för att hämta ID baserat på dess namn.
Exempel:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
Detta är samma objekt från föregående exempel.
Här är den igen med ID-utgången separat.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-------------+-----------------------+ | Object ID | TableHasDefaultCnst | |-------------+-----------------------| | 1013578649 | 1 | +-------------+-----------------------+
Exempel 3 – När tabellen INTE har en DEFAULT-begränsning
Här är vad som händer när tabellen inte har en DEFAULT-begränsning.
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 0 | +-----------------------+
I det här fallet är objektet en tabell, det är bara det att det inte har en DEFAULT-begränsning.
Exempel 4 – När objektet inte är en tabell
Det här är vad som händer när databasen innehåller ett objekt med ID, men det objektet inte är en tabell.
SELECT OBJECTPROPERTY( OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | NULL | +-----------------------+
Exempel 5 – Objekt existerar inte
SQL Server antar att objekt-ID:t finns i den aktuella databaskontexten. Om du skickar in ett objekt-ID från en annan databas får du antingen ett NULL-resultat eller så får du felaktiga resultat.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasDefaultCnst') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') AS [12345678];
Resultat:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
I det här fallet innehåller databasen inga objekt med det namnet eller ID, så jag får ett NULL-resultat.
Du får också NULL vid fel eller om du inte har behörighet att visa objektet.