Olá pessoal!
Boa noite!

Neste post, vou comentar sobre algumas procedures estendidas (extended procedures) do SQL Server e que são muito úteis. Até este post, não encontrei nenhuma documentação oficial da Microsoft sobre isso resolvi comentar sobre ela, além de demonstrar alguns exemplos.

Uma procedure estendida (XP) é um link para uma biblioteca dinâmica (DLL), programada utilizando a API SQL Server Open Data Services API e são utilizadas para estender as funcionalidades do SQL Server. Você pode utilizar das várias procedures que vem com o SQL Server ou criar as suas próprias procedures estendidas utilizando as linguagens de programação C ou C++.

Atualmente, não há um incentivo muito grande para a utilização dessas procedures, pois elas foram depreciadas e devem ser removidas em alguma versão futura do SQL Server. A alternativa mais viável para a substituição das XP Procedures é o uso de procedures SQL CLR.

Entretanto, não podia perder a oportunidade de comentar sobre essas SP’s, que sempre me auxiliaram em várias ocasiões e ainda vejo muitas rotinas as utilizando.

Para visualizar a lista de procedures estendidas presentes na sua instalação, basta executar o comando abaixo:

EXEC master.dbo.sp_helpextendedproc

XP Procedures - sp_helpextendedproc
XP Procedures - sp_helpextendedproc

sp_MSgetversion

Visualizar informações

Essa procedure pode ser utilizada para retornar a versão corrente do SQL Server.

Exemplo de uso:

EXEC master..sp_MSgetversion

Procedures XP - sp_MSgetversion
Procedures XP - sp_MSgetversion

Solução alternativa:

SELECT @@version

xp_dirtree

Visualizar informações
Essa procedure pode ser utilizada para listar todas as pastas e sub-pastas (recursivamente) a partir de um determinado diretório.

Exemplo de uso:

EXEC master..xp_dirtree 'C:\'

Procedures XP - xp_dirtree
Procedures XP - xp_dirtree

xp_subdirs

Visualizar informações
Essa procedure pode ser utilizada para retornar os diretórios (não recursivos) a partir de um diretório informado. Em comparação com a procedure xp_dirtree, ela retorna apenas as linhas onde a profundidade do nó (depth) = 1.

Exemplo de uso:

EXEC master.dbo.xp_subdirs 'C:\Users\'

Procedures XP - xp_subdirs
Procedures XP - xp_subdirs

xp_enum_oledb_providers

Visualizar informações
Essa procedure pode ser utilizada para retornar todos os provedores de OLE DB disponíveis. Ela retorna o nome do provedor, o parse name e a descrição do provedor.

Exemplo de uso:

EXEC master..xp_enum_oledb_providers

Procedures XP - xp_enum_oledb_providers
Procedures XP - xp_enum_oledb_providers

xp_enumerrorlogs

Visualizar informações
Essa procedure pode ser utilizada para retornar todos os arquivos de log de erro e as datas de alteração.

Exemplo de uso:

EXEC master.dbo.xp_enumerrorlogs

Procedures XP - xp_enumerrorlogs
Procedures XP - xp_enumerrorlogs

xp_readerrorlog

Visualizar informações
Essa procedure pode ser utilizada para ler o arquivo de log de erro do SQL Server. Como parâmetro opcional, você pode informar o # do arquivo. Caso não seja informado, irá mostrar o log atual.

Lista de parâmetros:
1º parâmetro: Número do arquivo de log que você deseja visualizar (0 = Current, 1 = Archive #1, 2 = Archive #2)
2º parâmetro: Tipo do arquivo de log (1 ou NULL para log de erro, 2 para log do SQL Agent)
3º parâmetro: A string que você gostaria de buscar
4º parâmetro: Uma outra string para refinar o resultado já filtrado
5º parâmetro: Data inicial do log
6º parâmetro: Data final do log
7º parâmetro: Ordenação dos resultados (‘asc’ = ascendente, ‘desc’ = descendente)

Exemplo de uso:

EXEC master..xp_readerrorlog -- Log atual
EXEC master..xp_readerrorlog 1 -- Log #1
EXEC master..xp_readerrorlog 0, 1, N'Starting up', 'master', NULL, NULL, N'asc' 

Procedures XP - xp_readerrorlog
Procedures XP - xp_readerrorlog

xp_logevent

Visualizar informações
Essa procedure pode ser utilizada para gravar mensagens de eventos no log do sistema operacional.

Exemplo de uso:

EXEC master..xp_logevent 50001, 'Teste de mensagem no Event Viewer', 'INFORMATIONAL' -- INFORMATIONAL, WARNING, ERROR

Procedures XP - xp_logevent
Procedures XP - xp_logevent

xp_enumgroups

Visualizar informações
Essa procedure pode ser utilizada para retornar todos os grupos da máquina e suas descrições.

Exemplo de uso:

EXEC master..xp_enumgroups

Procedures XP - xp_enumgroups
Procedures XP - xp_enumgroups

xp_fileexist

Visualizar informações
Essa procedure pode ser utilizada para retornar todos os grupos da máquina e suas descrições.

Exemplo de uso:

EXEC master.dbo.xp_fileexist 'C:\Teste.html'

Procedures XP - xp_fileexist
Procedures XP - xp_fileexist

xp_create_subdir

Visualizar informações
Essa procedure pode ser utilizada para criar diretórios no seu servidor SQL Server.

Exemplo de uso:

EXEC master.dbo.xp_create_subdir 'C:\Dirceu\Teste'

Procedures XP - xp_create_subdir
Procedures XP - xp_create_subdir

xp_delete_file

Visualizar informações
Essa procedure pode ser utilizada para apagar arquivos de backup ou report. Apesar do nome parecer que ela pode apagar qualquer arquivo, ela é restrita para apenas arquivos de backup (BAK) e relatórios (RPT).

Exemplo de uso:

EXEC master.dbo.xp_delete_file
    0, -- (0 = Arquivo de backup, 1 = Arquivo de report)
    'C:\Backups\', -- diretório (terminando com "\")
    'bak', -- extensão do arquivo (sem o ".")
    '2015-08-31', -- data de corte para deletar
    1 -- flag para subdiretórios (1 = incluir sub-diretórios, 0 = não incluir)

Procedures XP - sp_delete_file
Procedures XP - sp_delete_file

xp_fixeddrives

Visualizar informações
Essa procedure pode ser utilizada para listar todas as unidades de disco físico ou drives mapeados, informando o espaço livre.

Exemplo de uso:

EXEC master.dbo.xp_fixeddrives

Procedures XP - xp_fixeddrives
Procedures XP - xp_fixeddrives

xp_availablemedia

Visualizar informações
Essa procedure pode ser utilizada para listar todas as unidades de backup conectadas ao servidor. Caso não tenha nenhuma unidade, a SP irá retornar todos as unidades de disco.

Exemplo de uso:

EXEC master.dbo.xp_availablemedia

Procedures XP - xp_availablemedia
Procedures XP - xp_availablemedia

xp_getnetname

Visualizar informações
Essa procedure pode ser utilizada para retornar o nome WINS da máquina onde sua sessão está conectada.

Exemplo de uso:

EXEC master..xp_getnetname

Procedures XP - xp_getnetname
Procedures XP - xp_getnetname

xp_regdeletekey

Visualizar informações
Essa procedure pode ser utilizada para remover uma chave no Registro do Windows da instalação do SQL Server. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.

Exemplo de uso:

EXEC master.dbo.xp_regdeletekey
    @rootkey = 'HKEY_LOCAL_MACHINE',  
    @key = 'SOFTWARE\Teste_Dirceu'

Procedures XP - xp_regdeletekey_1
Procedures XP - xp_regdeletekey_1

Procedures XP - xp_regdeletekey_2
Procedures XP - xp_regdeletekey_2

Procedures XP - xp_regdeletekey_3
Procedures XP - xp_regdeletekey_3

xp_regdeletevalue

Visualizar informações
Essa procedure pode ser utilizada para remover um valor específico de uma chave no Registro do Windows da instalação do SQL Server. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.

Exemplo de uso:

EXEC master.dbo.xp_regdeletevalue
     @rootkey = 'HKEY_LOCAL_MACHINE',
     @key = 'SOFTWARE\Teste_Dirceu',
     @value_name = 'Oracle Database'

Procedures XP - xp_regdeletevalue
Procedures XP - xp_regdeletevalue

Procedures XP - xp_regdeletevalue_2
Procedures XP - xp_regdeletevalue_2

Procedures XP - xp_regdeletevalue_3
Procedures XP - xp_regdeletevalue_3

xp_regread

Visualizar informações
Essa procedure pode ser utilizada para consultar um valor específico de uma chave no Registro do Windows da instalação do SQL Server.

Exemplo de uso:

DECLARE @Retorno VARCHAR(4000)

EXEC master..xp_regread 
	@rootkey='HKEY_LOCAL_MACHINE',
	@key='SOFTWARE\Teste_Dirceu',
	@value_name = 'Campeão Carioca 2015',
	@value = @Retorno OUTPUT
	
SELECT @Retorno

Procedures XP - xp_regread_1
Procedures XP - xp_regread_1

Procedures XP - xp_regread_2
Procedures XP - xp_regread_2

xp_regwrite

Visualizar informações
Essa procedure pode ser utilizada para gravar um valor específico de uma chave no Registro do Windows da instalação do SQL Server. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.

Exemplo de uso:

EXEC master..xp_regwrite
     @rootkey = 'HKEY_LOCAL_MACHINE',
     @key = 'SOFTWARE\Teste_Dirceu',
     @value_name = 'Flamengo na Copa do Brasil 2015',
     @type = 'REG_SZ',
     @value = 'Eliminado pelo Vasco'

Procedures XP - xp_regwrite_1
Procedures XP - xp_regwrite_1

Procedures XP - xp_regwrite_2
Procedures XP - xp_regwrite_2

xp_cmdshell

Visualizar informações
Permite executar qualquer comando do Prompt de comando (DOS) no servidor. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.

Para utilizar esse comando, é necessário habilitar esse recurso, uma vez que se mal utilizado, pode danificar seriamente a sua instalação:

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1 -- 0 para desativar
GO
RECONFIGURE
GO

Exemplo de uso:

EXEC master.dbo.xp_cmdshell 'dir C:\'
EXEC master.dbo.xp_cmdshell 'ping localhost'

XP Procedures - xp_cmdshell
XP Procedures - xp_cmdshell

XP Procedures - xp_cmdshell_2
XP Procedures - xp_cmdshell_2

sql server clr xp extended procedures native dll

sql server clr xp extended procedures native dll