Du kan bruge OBJECTPROPERTY()
funktion i SQL Server for at se, om en tabel har en DEFAULT-begrænsning eller ej.
For at gøre dette skal du sende tabellens objekt-id som det første argument og TableHasDefaultCnst
som det andet argument. Funktionen returnerer en 1
eller en 0
afhængigt af, om den har en DEFAULT-begrænsning eller ej.
En returværdi på 1
betyder, at tabellen har en DEFAULT-begrænsning og en værdi på 0
betyder, at det ikke er det.
Eksempel 1 – Grundlæggende brug
Her er et hurtigt eksempel at demonstrere.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
I dette tilfælde er WideWorldImportersDW databasen har en tabel med det angivne ID, og den har en DEFAULT-begrænsning.
Eksempel 2 – Hentning af objekt-id'et
Hvis du kender tabellens navn, men ikke dens ID, kan du bruge OBJECT_ID()
funktion for at hente ID'et baseret på dets navn.
Eksempel:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
Dette er det samme objekt fra det foregående eksempel.
Her er den igen med ID-udgangen separat.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-------------+-----------------------+ | Object ID | TableHasDefaultCnst | |-------------+-----------------------| | 1013578649 | 1 | +-------------+-----------------------+
Eksempel 3 – Når tabellen IKKE har en DEFAULT-begrænsning
Her er, hvad der sker, når tabellen ikke har en DEFAULT-begrænsning.
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 0 | +-----------------------+
I dette tilfælde er objektet en tabel, det er bare, at det ikke har en DEFAULT-begrænsning.
Eksempel 4 – Når objektet ikke er en tabel
Her er, hvad der sker, når databasen indeholder et objekt med ID'et, men det objekt er ikke en tabel.
SELECT OBJECTPROPERTY( OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultat:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | NULL | +-----------------------+
Eksempel 5 – Objekt eksisterer ikke
SQL Server antager, at objekt-id'et er i den aktuelle databasekontekst. Hvis du sender et objekt-id fra en anden database, får du enten et NULL-resultat, eller du får forkerte resultater.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasDefaultCnst') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') AS [12345678];
Resultat:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
I dette tilfælde indeholder databasen ingen objekter med det navn eller ID, og så får jeg et NULL-resultat.
Du får også NULL ved fejl, eller hvis du ikke har tilladelse til at se objektet.