Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Informações de coluna de retorno para um procedimento armazenado no SQL Server:sp_sproc_columns


No SQL Server, o sp_sproc_columns O procedimento armazenado do sistema permite obter informações de coluna para um determinado procedimento armazenado ou função definida pelo usuário no sistema atual.

É equivalente a SQLProcedureColumns em ODBC.


Sintaxe


A sintaxe fica assim:
sp_sproc_columns [[@procedure_name = ] 'name']   
    [ , [@procedure_owner = ] 'owner']   
    [ , [@procedure_qualifier = ] 'qualifier']   
    [ , [@column_name = ] 'column_name']  
    [ , [@ODBCVer = ] 'ODBCVer']  
    [ , [@fUsePattern = ] 'fUsePattern']

Todos os argumentos são opcionais. Consulte a documentação da Microsoft para obter uma explicação detalhada sobre eles.

Exemplo 1 – Não especifique nenhum argumento


Você pode executar o procedimento armazenado sem fornecer argumentos. Assim:
EXEC sp_sproc_columns

Ou ainda assim:
sp_sproc_columns

Isso retorna todos os procedimentos armazenados e funções definidas pelo usuário no banco de dados atual. Quando executo isso no banco de dados de exemplo WideWorldImporters, recebo 9077 linhas. No próximo exemplo, vou reduzi-lo a apenas um.

Exemplo 2 – Especificar todos os argumentos


Aqui está o que parece se você incluir todos os argumentos.
EXEC sp_sproc_columns 
  @procedure_name = 'GetCityUpdates',
  @procedure_owner = 'Integration',
  @procedure_qualifier = 'WideWorldImporters',
  @column_name = '@RETURN_VALUE',
  @ODBCVer = 2,
  @fUsePattern = 1;

Resultado (usando saída 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

Nesse caso, devolvo informações sobre o valor de retorno do GetCityUpdates procedimento armazenado.

Exemplo 3 – Especificar apenas o procedimento armazenado (ou função)


Em vez de incluir todos os argumentos, você pode incluir apenas o nome do procedimento armazenado. No entanto, se você não especificar o @column_name , isso retornará uma linha para cada coluna.

Além disso, você pode tornar seu código mais conciso omitindo o nome do argumento (ou seja, incluindo apenas seu valor).
EXEC sp_sproc_columns GetCityUpdates;

Resultado (usando saída 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

Exemplo 4 – Outras variações


Você pode fornecer qualquer variação de argumentos para retornar apenas as informações necessárias.

Por exemplo, você pode retornar todas as informações de um proprietário de procedimento específico:
EXEC sp_sproc_columns @procedure_owner = 'Integration'

Ou você pode obter informações sobre todos os valores de retorno de todos os procedimentos e funções definidas pelo usuário:
EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Claro, você sempre pode incluir o qualificador de procedimento, se desejar. No SQL Server, esse parâmetro representa o nome do banco de dados. Em alguns produtos, representa o nome do servidor do ambiente de banco de dados da tabela.
EXEC sp_sproc_columns 
  @column_name = '@RETURN_VALUE',
  @procedure_qualifier = 'WideWorldImporters';

Exemplo 5 – Caracteres curinga


O @fUsePattern O argumento permite especificar se o sublinhado (_ ), porcentagem (% ) e colchetes ([ ] ) são interpretados como caracteres curinga.

Por exemplo, a execução do código a seguir retornará todos os procedimentos e funções definidas pelo usuário que começam com Get .
EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 1;

Então, no meu caso, isso retornou procedimentos como GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, etc.

Se eu desabilitar caracteres curinga:
EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 0;

Não obtenho resultados.