Du kan bruge OBJECTPROPERTY()
funktion i SQL Server for at kontrollere, om et objekt er en primær nøgle eller ej.
For at finde ud af, om et objekt er en primær nøgle, skal du sende objekt-id'et som det første argument og IsPrimaryKey
som det andet argument. Funktionen returnerer en 1
eller en 0
afhængigt af, om det er en primær nøgle eller ej.
En returværdi på 1
betyder, at det er en primær nøgle 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 PK_Test; SELECT OBJECTPROPERTY(901578250, 'IsPrimaryKey') AS [IsPrimaryKey];
Resultat:
+----------------+ | IsPrimaryKey | |----------------| | 1 | +----------------+
I dette tilfælde, PK_Test databasen har et objekt med det angivne id, og det er en primær nøgle.
Eksempel 2 – Hentning af objekt-id'et
Hvis du kender objektets navn, men ikke dets ID, kan du bruge OBJECT_ID()
funktion for at hente ID'et baseret på dets navn.
Eksempel:
SELECT OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];
Resultat:
+----------------+ | IsPrimaryKey | |----------------| | 1 | +----------------+
I dette tilfælde kontrollerede jeg det samme objekt fra det forrige eksempel.
Her er den igen med ID-udgangen separat.
SELECT OBJECT_ID('PK_Musician') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];
Resultat:
+-------------+----------------+ | Object ID | IsPrimaryKey | |-------------+----------------| | 901578250 | 1 | +-------------+----------------+
Eksempel 3 – Når objektet IKKE er en primær nøgle
Her er, hvad der sker, når objektet ikke er en primær nøgle.
SELECT OBJECTPROPERTY(885578193, 'IsPrimaryKey') AS [IsPrimaryKey];
Resultat:
+----------------+ | IsPrimaryKey | |----------------| | 0 | +----------------+
I dette tilfælde gør det databasen faktisk har et objekt med det ID, men objektet er faktisk en tabel, så jeg får et negativt resultat.
Her bruger den igen OBJECT_ID()
.
SELECT OBJECT_ID('Musician') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsPrimaryKey') AS [IsPrimaryKey], OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsTable') AS [IsTable];
Resultat:
+-------------+----------------+-----------+ | Object ID | IsPrimaryKey | IsTable | |-------------+----------------+-----------| | 885578193 | 0 | 1 | +-------------+----------------+-----------+
Jeg har også tjekket, om objektet er en tabel, og resultatet er positivt.
Eksempel 4 – 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'), 'IsPrimaryKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsPrimaryKey') 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.