V SQL Server můžete použít OBJECTPROPERTY()
funkcí zjistit, zda je objekt uloženou procedurou.
Tato funkce přijímá dva parametry:ID objektu a vlastnost, pro kterou ji hledáte.
Proto můžete předat ID objektu jako první argument a IsProcedure
jako druhý a funkce vrátí buď 1
nebo 0
v závislosti na tom, zda se jedná o uloženou proceduru.
Vrácená hodnota 1
znamená, že je uložená procedura a hodnota 0
znamená, že není.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(466100701, 'IsProcedure') AS [IsProcedure];
Výsledek:
+---------------+ | IsProcedure | |---------------| | 1 | +---------------+
V tomto případě Hudba databáze má objekt s poskytnutým ID a je to ve skutečnosti uložená procedura.
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('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];
Výsledek:
+---------------+ | IsProcedure | |---------------| | 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('Integration.GetLineageKey') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];
Výsledek:
+-------------+---------------+ | Object ID | IsProcedure | |-------------+---------------| | 466100701 | 1 | +-------------+---------------+
Příklad 3 – když objekt NENÍ uložená procedura
Zde je to, co se stane, když objekt není uložená procedura.
SELECT OBJECTPROPERTY(1013578649, 'IsProcedure') AS [IsProcedure];
Výsledek:
+---------------+ | IsProcedure | |---------------| | 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('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsProcedure') AS [IsProcedure];
Výsledek:
+-------------+---------------+ | Object ID | IsProcedure | |-------------+---------------| | 1013578649 | 0 | +-------------+---------------+
Příklad 4 – Objekt neexistuje
SQL Server předpokládá, že ID objektu je v aktuálním kontextu databáze. Pokud předáte ID objektu z jiné databáze, dostanete buď výsledek NULL, nebo nesprávné výsledky.
SELECT OBJECTPROPERTY(OBJECT_ID('NonExistentObject'), 'IsProcedure') AS [NonExistentObject], OBJECTPROPERTY(11111111, 'IsProcedure') AS [11111111];
Výsledek:
+---------------------+------------+ | NonExistentObject | 11111111 | |---------------------+------------| | NULL | NULL | +---------------------+------------+
V tomto případě databáze neobsahuje žádné objekty tohoto jména nebo ID.