sql >> Base de Datos >  >> RDS >> Sqlserver

Devolver información de columna para un procedimiento almacenado en SQL Server:sp_sproc_columns

En SQL Server, las sp_sproc_columns El procedimiento almacenado del sistema le permite obtener información de columna para un procedimiento almacenado determinado o una función definida por el usuario en el sistema actual.

Es equivalente a SQLProcedureColumns en ODBC.

Sintaxis

La sintaxis es así:

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

Todos los argumentos son opcionales. Consulte la documentación de Microsoft para obtener una explicación detallada de estos.

Ejemplo 1:no especificar argumentos

Puede ejecutar el procedimiento almacenado sin proporcionar ningún argumento. Así:

EXEC sp_sproc_columns

O incluso así:

sp_sproc_columns

Esto devuelve todos los procedimientos almacenados y funciones definidas por el usuario en la base de datos actual. Cuando ejecuto eso contra la base de datos de ejemplo de WideWorldImporters, obtengo 9077 filas. En el siguiente ejemplo lo reduciré a uno solo.

Ejemplo 2:especificar todos los argumentos

Esto es lo que parece si incluye todos los argumentos.

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

Resultado (usando salida vertical):

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

En este caso, devuelvo información sobre el valor de retorno de GetCityUpdates procedimiento almacenado.

Ejemplo 3:especificar solo el procedimiento (o función) almacenado

En lugar de incluir todos los argumentos, puede incluir solo el nombre del procedimiento almacenado. Sin embargo, si no especifica el @column_name , hacer esto devolverá una fila para cada columna.

Además, puede hacer que su código sea más conciso omitiendo el nombre del argumento (es decir, solo incluyendo su valor).

EXEC sp_sproc_columns GetCityUpdates;

Resultado (usando salida vertical):

-[ 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

Ejemplo 4:otras variaciones

Puede proporcionar cualquier variación de argumentos para devolver solo la información que necesita.

Por ejemplo, podría devolver toda la información de un propietario de procedimiento en particular:

EXEC sp_sproc_columns @procedure_owner = 'Integration'

O puede obtener información sobre todos los valores de retorno de todos los procedimientos y funciones definidas por el usuario:

EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Por supuesto, siempre puede incluir el calificador de procedimiento si lo desea. En SQL Server, este parámetro representa el nombre de la base de datos. En algunos productos, representa el nombre del servidor del entorno de la base de datos de la tabla.

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

Ejemplo 5:caracteres comodín

El @fUsePattern El argumento le permite especificar si subrayar o no (_ ), porcentaje (% ), y corchete ([ ] ) los caracteres se interpretan como caracteres comodín.

Por ejemplo, ejecutar el siguiente código devolverá todos los procedimientos y funciones definidas por el usuario que comienzan con Get .

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

Entonces, en mi caso, esto devolvió procedimientos como GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, etc.

Si desactivo los caracteres comodín:

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

No obtengo resultados.