In SQL Server puoi utilizzare OBJECTPROPERTY()
funzione per scoprire se un oggetto è o meno una procedura memorizzata.
Questa funzione accetta due parametri:l'ID oggetto e la proprietà per la quale lo stai verificando.
Pertanto, puoi passare l'ID oggetto come primo argomento e IsProcedure
come secondo, e la funzione restituirà un 1
o un 0
a seconda che si tratti o meno di una stored procedure.
Un valore restituito di 1
significa che è una procedura memorizzata e un valore di 0
significa che non lo è.
Esempio 1 – Utilizzo di base
Ecco un rapido esempio da dimostrare.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(466100701, 'IsProcedure') AS [IsProcedure];
Risultato:
+---------------+ | IsProcedure | |---------------| | 1 | +---------------+
In questo caso, la Musica database ha un oggetto con l'ID fornito, ed è in effetti una procedura memorizzata.
Esempio 2:ottenere l'ID oggetto
Se conosci il nome dell'oggetto, ma non il suo ID, puoi utilizzare OBJECT_ID()
funzione per recuperare l'ID in base al suo nome.
Esempio:
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];
Risultato:
+---------------+ | IsProcedure | |---------------| | 1 | +---------------+
In questo caso ho controllato lo stesso oggetto dell'esempio precedente.
Eccolo di nuovo con l'output ID separatamente.
SELECT OBJECT_ID('Integration.GetLineageKey') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];
Risultato:
+-------------+---------------+ | Object ID | IsProcedure | |-------------+---------------| | 466100701 | 1 | +-------------+---------------+
Esempio 3 – Quando l'oggetto NON è una stored procedure
Ecco cosa succede quando l'oggetto non è una stored procedure.
SELECT OBJECTPROPERTY(1013578649, 'IsProcedure') AS [IsProcedure];
Risultato:
+---------------+ | IsProcedure | |---------------| | 0 | +---------------+
In questo caso, il database fa in effetti ho un oggetto con quell'ID, ma l'oggetto è in realtà una tabella, quindi ottengo un risultato negativo.
Eccolo di nuovo usando OBJECT_ID()
.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsProcedure') AS [IsProcedure];
Risultato:
+-------------+---------------+ | Object ID | IsProcedure | |-------------+---------------| | 1013578649 | 0 | +-------------+---------------+
Esempio 4 – L'oggetto non esiste
SQL Server presuppone che l'ID oggetto si trovi nel contesto del database corrente. Se passi un ID oggetto da un database diverso, otterrai un risultato NULL o otterrai risultati errati.
SELECT OBJECTPROPERTY(OBJECT_ID('NonExistentObject'), 'IsProcedure') AS [NonExistentObject], OBJECTPROPERTY(11111111, 'IsProcedure') AS [11111111];
Risultato:
+---------------------+------------+ | NonExistentObject | 11111111 | |---------------------+------------| | NULL | NULL | +---------------------+------------+
In questo caso il database non contiene oggetti con quel nome o ID.