Můžete použít OBJECTPROPERTY()
funkce na serveru SQL Server ke kontrole, zda je objekt primárním klíčem.
Chcete-li zjistit, zda je objekt primárním klíčem, předejte ID objektu jako první argument a IsPrimaryKey
jako druhý argument. Funkce vrací 1
nebo 0
podle toho, zda se jedná o primární klíč.
Vrácená hodnota 1
znamená, že je primární klíč a hodnotu 0
znamená, že není.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE PK_Test; SELECT OBJECTPROPERTY(901578250, 'IsPrimaryKey') AS [IsPrimaryKey];
Výsledek:
+----------------+ | IsPrimaryKey | |----------------| | 1 | +----------------+
V tomto případě PK_Test databáze má objekt s poskytnutým ID a je to primární klíč.
Příklad 2 – Získání ID objektu
Pokud znáte název objektu, ale neznáte jeho ID, můžete použít OBJECT_ID()
funkce pro načtení ID na základě jeho názvu.
Příklad:
SELECT OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];
Výsledek:
+----------------+ | IsPrimaryKey | |----------------| | 1 | +----------------+
V tomto případě jsem zkontroloval stejný objekt z předchozího příkladu.
Zde je to opět s výstupem ID samostatně.
SELECT OBJECT_ID('PK_Musician') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];
Výsledek:
+-------------+----------------+ | Object ID | IsPrimaryKey | |-------------+----------------| | 901578250 | 1 | +-------------+----------------+
Příklad 3 – Když objekt NENÍ primární klíč
Co se stane, když objekt není primární klíč.
SELECT OBJECTPROPERTY(885578193, 'IsPrimaryKey') AS [IsPrimaryKey];
Výsledek:
+----------------+ | IsPrimaryKey | |----------------| | 0 | +----------------+
V tomto případě databáze dělá ve skutečnosti mají objekt s tímto ID, ale objekt je ve skutečnosti tabulka, takže dostanu negativní výsledek.
Zde je to opět pomocí OBJECT_ID()
.
SELECT OBJECT_ID('Musician') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsPrimaryKey') AS [IsPrimaryKey], OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsTable') AS [IsTable];
Výsledek:
+-------------+----------------+-----------+ | Object ID | IsPrimaryKey | IsTable | |-------------+----------------+-----------| | 885578193 | 0 | 1 | +-------------+----------------+-----------+
Také jsem zkontroloval, zda je objekt tabulkou, a výsledek je pozitivní.
Příklad 4 – Objekt neexistuje
SQL Server předpokládá, že ID objektu je v aktuálním kontextu databáze. Pokud zadáte ID objektu z jiné databáze, dostanete buď výsledek NULL, nebo nesprávné výsledky.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsPrimaryKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsPrimaryKey') AS [12345678];
Výsledek:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
V tomto případě databáze neobsahuje žádné objekty tohoto jména nebo ID, takže dostanu výsledek NULL.
Při chybě nebo v případě, že nemáte oprávnění k zobrazení objektu, získáte také hodnotu NULL.