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.