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.