Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Verificare se un oggetto è una stored procedure utilizzando OBJECTPROPERTY() in SQL Server

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.