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

Informazioni sulla colonna restituite per una stored procedure in SQL Server:sp_sproc_columns

In SQL Server, sp_sproc_columns la procedura memorizzata di sistema consente di ottenere informazioni sulla colonna per una determinata procedura memorizzata o una funzione definita dall'utente nel sistema corrente.

È equivalente a SQLProcedureColumns in ODBC.

Sintassi

La sintassi è questa:

sp_sproc_columns [[@procedure_name = ] 'name']   
    [ , [@procedure_owner = ] 'owner']   
    [ , [@procedure_qualifier = ] 'qualifier']   
    [ , [@column_name = ] 'column_name']  
    [ , [@ODBCVer = ] 'ODBCVer']  
    [ , [@fUsePattern = ] 'fUsePattern']

Tutti gli argomenti sono facoltativi. Consulta la documentazione Microsoft per una spiegazione dettagliata di questi.

Esempio 1:non specificare argomenti

È possibile eseguire la procedura memorizzata senza fornire alcun argomento. In questo modo:

EXEC sp_sproc_columns

O anche così:

sp_sproc_columns

Ciò restituisce tutte le procedure memorizzate e le funzioni definite dall'utente nel database corrente. Quando lo eseguo sul database di esempio WideWorldImporters, ottengo 9077 righe. Nel prossimo esempio lo restringerò a uno solo.

Esempio 2:specificare tutti gli argomenti

Ecco come appare se includi tutti gli argomenti.

EXEC sp_sproc_columns 
  @procedure_name = 'GetCityUpdates',
  @procedure_owner = 'Integration',
  @procedure_qualifier = 'WideWorldImporters',
  @column_name = '@RETURN_VALUE',
  @ODBCVer = 2,
  @fUsePattern = 1;

Risultato (usando l'output verticale):

PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @RETURN_VALUE
COLUMN_TYPE         | 5
DATA_TYPE           | 4
TYPE_NAME           | int
PRECISION           | 10
LENGTH              | 4
SCALE               | 0
RADIX               | 10
NULLABLE            | 0
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | 4
SQL_DATETIME_SUB    | NULL
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 0
IS_NULLABLE         | NO
SS_DATA_TYPE        | 56

In questo caso, restituisco informazioni sul valore di ritorno di GetCityUpdates procedura memorizzata.

Esempio 3:specificare solo la stored procedure (o funzione)

Anziché includere tutti gli argomenti, è possibile includere solo il nome della stored procedure. Tuttavia, se non specifichi il @column_name , in questo modo verrà restituita una riga per ogni colonna.

Inoltre, puoi rendere il tuo codice più conciso omettendo il nome dell'argomento (cioè includendo solo il suo valore).

EXEC sp_sproc_columns GetCityUpdates;

Risultato (usando l'output verticale):

-[ RECORD 1 ]-------------------------
PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @RETURN_VALUE
COLUMN_TYPE         | 5
DATA_TYPE           | 4
TYPE_NAME           | int
PRECISION           | 10
LENGTH              | 4
SCALE               | 0
RADIX               | 10
NULLABLE            | 0
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | 4
SQL_DATETIME_SUB    | NULL
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 0
IS_NULLABLE         | NO
SS_DATA_TYPE        | 56
-[ RECORD 2 ]-------------------------
PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @LastCutoff
COLUMN_TYPE         | 1
DATA_TYPE           | -9
TYPE_NAME           | datetime2
PRECISION           | 27
LENGTH              | 54
SCALE               | 7
RADIX               | NULL
NULLABLE            | 1
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | -9
SQL_DATETIME_SUB    | 3
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 1
IS_NULLABLE         | YES
SS_DATA_TYPE        | 0
-[ RECORD 3 ]-------------------------
PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @NewCutoff
COLUMN_TYPE         | 1
DATA_TYPE           | -9
TYPE_NAME           | datetime2
PRECISION           | 27
LENGTH              | 54
SCALE               | 7
RADIX               | NULL
NULLABLE            | 1
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | -9
SQL_DATETIME_SUB    | 3
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 2
IS_NULLABLE         | YES
SS_DATA_TYPE        | 0

Esempio 4 – Altre variazioni

Puoi fornire qualsiasi variazione di argomenti per restituire solo le informazioni richieste.

Ad esempio, potresti restituire tutte le informazioni da un particolare proprietario della procedura:

EXEC sp_sproc_columns @procedure_owner = 'Integration'

Oppure potresti ottenere informazioni su tutti i valori restituiti da tutte le procedure e le funzioni definite dall'utente:

EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Naturalmente, se lo desideri, puoi sempre includere il qualificatore di procedura. In SQL Server, questo parametro rappresenta il nome del database. In alcuni prodotti, rappresenta il nome del server dell'ambiente di database della tabella.

EXEC sp_sproc_columns 
  @column_name = '@RETURN_VALUE',
  @procedure_qualifier = 'WideWorldImporters';

Esempio 5 – Caratteri jolly

Il @fUsePattern argomento consente di specificare se il carattere di sottolineatura o meno (_ ), percentuale (% ) e parentesi ([ ] ) i caratteri vengono interpretati come caratteri jolly.

Ad esempio, l'esecuzione del codice seguente restituirà tutte le procedure e le funzioni definite dall'utente che iniziano con Get .

EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 1;

Quindi, nel mio caso, questo ha restituito procedure come GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, ecc.

Se disabilito i caratteri jolly:

EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 0;

Non ottengo risultati.