¡Hola, chicos!
¡Buenas noches!

En este post comentaré algunos procedimientos extendidos de SQL Server que son muy útiles. Hasta este post, no encontré ninguna documentación oficial de Microsoft sobre esto, así que decidí comentarlo, además de demostrar algunos ejemplos.

Un procedimiento extendido (XP) es un enlace a una biblioteca dinámica (DLL), programada utilizando la API Open Data Services de SQL Server y se utiliza para ampliar las funcionalidades de SQL Server. Puede utilizar los distintos procedimientos que vienen con SQL Server o crear sus propios procedimientos extendidos utilizando los lenguajes de programación C o C++.

Actualmente, no hay muchos incentivos para utilizar estos procedimientos, ya que han quedado obsoletos y deberían eliminarse en alguna versión futura de SQL Server. La alternativa más viable para reemplazar los Procedimientos XP es el uso de procedimientos CLR de SQL.

Sin embargo no podía dejar pasar la oportunidad de comentar estos SP's, que siempre me han ayudado en varias ocasiones y todavía veo muchas rutinas usándolos.

Para ver la lista de procedimientos extendidos presentes en su instalación, simplemente ejecute el siguiente comando:

EXEC master.dbo.sp_helpextendedproc

XP Procedures - sp_helpextendedproc
Procedimientos XP - sp_helpextendedproc

sp_MSgetversion

Ver información

Este procedimiento se puede utilizar para devolver la versión actual de SQL Server.

Ejemplo de uso:

EXEC master..sp_MSgetversion

Procedures XP - sp_MSgetversion
Procedimientos XP - sp_MSgetversion

Solución alternativa:

SELECT @@version

xp_dirtree

Ver información
Este procedimiento se puede utilizar para enumerar todas las carpetas y subcarpetas (recursivamente) de un directorio determinado.

Ejemplo de uso:

EXEC master..xp_dirtree 'C:\'

Procedures XP - xp_dirtree
Procedimientos XP - xp_dirtree

xp_subdirs

Ver información
Este procedimiento se puede utilizar para devolver directorios (no recursivos) desde un directorio informado. En comparación con el procedimiento xp_dirtree, solo devuelve filas donde la profundidad del nodo = 1.

Ejemplo de uso:

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

Procedures XP - xp_subdirs
Procedimientos XP - xp_subdirs

xp_enum_oledb_providers

Ver información
Este procedimiento se puede utilizar para devolver todos los proveedores OLE DB disponibles. Devuelve el nombre del proveedor, el nombre del análisis y la descripción del proveedor.

Ejemplo de uso:

EXEC master..xp_enum_oledb_providers

Procedures XP - xp_enum_oledb_providers
Procedimientos XP - xp_enum_oledb_providers

xp_enumerrorlogs

Ver información
Este procedimiento se puede utilizar para devolver todos los archivos de registro de errores y cambiar las fechas.

Ejemplo de uso:

EXEC master.dbo.xp_enumerrorlogs

Procedures XP - xp_enumerrorlogs
Procedimientos XP - xp_enumerrorlogs

xp_readerrorlog

Ver información
Este procedimiento se puede utilizar para leer el archivo de registro de errores de SQL Server. Como parámetro opcional, puede ingresar el número del archivo. Si no se informa, mostrará el registro actual.

Lista de parámetros:
1er parámetro: Número del archivo de registro que desea ver (0 = Actual, 1 = Archivo #1, 2 = Archivo #2)
Segundo parámetro: tipo de archivo de registro (1 o NULL para el registro de errores, 2 para el registro del Agente SQL)
3er parámetro: la cadena que desea buscar
4to parámetro: Otra cadena para refinar el resultado ya filtrado
5to parámetro: fecha de inicio del registro
Sexto parámetro: fecha de finalización del registro
7mo parámetro: Orden de resultados ('asc' = ascendente, 'desc' = descendente)

Ejemplo 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
Procedimientos XP - xp_readerrorlog

xp_logevent

Ver información
Este procedimiento se puede utilizar para escribir mensajes de eventos en el registro del sistema operativo.

Ejemplo de uso:

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

Procedures XP - xp_logevent
Procedimientos XP - xp_logevent

xp_enumgrupos

Ver información
Este procedimiento se puede utilizar para devolver todos los grupos de máquinas y sus descripciones.

Ejemplo de uso:

EXEC master..xp_enumgroups

Procedures XP - xp_enumgroups
Procedimientos XP - xp_enumgroups

xp_fileexist

Ver información
Este procedimiento se puede utilizar para devolver todos los grupos de máquinas y sus descripciones.

Ejemplo de uso:

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

Procedures XP - xp_fileexist
Procedimientos XP - xp_fileexist

xp_create_subdir

Ver información
Este procedimiento se puede utilizar para crear directorios en su servidor SQL Server.

Ejemplo de uso:

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

Procedures XP - xp_create_subdir
Procedimientos XP - xp_create_subdir

xp_delete_file

Ver información
Este procedimiento se puede utilizar para eliminar archivos de respaldo o de informes. Aunque el nombre parece que puede eliminar cualquier archivo, está restringido únicamente a archivos de copia de seguridad (BAK) e informes (RPT).

Ejemplo 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
Procedimientos XP - sp_delete_file

xp_fixeddrives

Ver información
Este procedimiento se puede utilizar para enumerar todas las unidades de discos físicos o unidades asignadas, informando el espacio libre.

Ejemplo de uso:

EXEC master.dbo.xp_fixeddrives

Procedures XP - xp_fixeddrives
Procedimientos XP - xp_fixeddrives

xp_disponiblemedia

Ver información
Este procedimiento se puede utilizar para enumerar todas las unidades de respaldo conectadas al servidor. Si no tiene ninguna unidad, el SP le devolverá todas las unidades de disco.

Ejemplo de uso:

EXEC master.dbo.xp_availablemedia

Procedures XP - xp_availablemedia
Trámites XP - xp_availablemedia

xp_getnetname

Ver información
Este procedimiento se puede utilizar para devolver el nombre WINS de la máquina donde está conectada su sesión.

Ejemplo de uso:

EXEC master..xp_getnetname

Procedures XP - xp_getnetname
Procedimientos XP - xp_getnetname

xp_regdeletekey

Ver información
Este procedimiento se puede utilizar para eliminar una clave en el Registro de Windows de la instalación de SQL Server. Tenga mucho cuidado al utilizar este procedimiento, ya que puede dañar la instalación de Windows en ese servidor.

Ejemplo de uso:

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

Procedures XP - xp_regdeletekey_1
Procedimientos XP - xp_regdeletekey_1

Procedures XP - xp_regdeletekey_2
Procedimientos XP - xp_regdeletekey_2

Procedures XP - xp_regdeletekey_3
Procedimientos XP - xp_regdeletekey_3

xp_regdeletevalue

Ver información
Este procedimiento se puede utilizar para eliminar un valor específico de una clave en el Registro de Windows de la instalación de SQL Server. Tenga mucho cuidado al utilizar este procedimiento, ya que puede dañar la instalación de Windows en ese servidor.

Ejemplo de uso:

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

Procedures XP - xp_regdeletevalue
Procedimientos XP - xp_regdeletevalue

Procedures XP - xp_regdeletevalue_2
Procedimientos XP - xp_regdeletevalue_2

Procedures XP - xp_regdeletevalue_3
Procedimientos XP - xp_regdeletevalue_3

xp_regread

Ver información
Este procedimiento se puede utilizar para consultar un valor específico de una clave en el Registro de Windows de la instalación de SQL Server.

Ejemplo 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
Trámites XP - xp_regread_1

Procedures XP - xp_regread_2
Trámites XP - xp_regread_2

xp_regwrite

Ver información
Este procedimiento se puede utilizar para escribir un valor específico de una clave en el Registro de Windows de la instalación de SQL Server. Tenga mucho cuidado al utilizar este procedimiento, ya que puede dañar la instalación de Windows en ese servidor.

Ejemplo 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
Procedimientos XP - xp_regwrite_1

Procedures XP - xp_regwrite_2
Procedimientos XP - xp_regwrite_2

xp_cmdshell

Ver información
Le permite ejecutar cualquier comando del símbolo del sistema (DOS) en el servidor. Tenga mucho cuidado al utilizar este procedimiento, ya que puede dañar la instalación de Windows en ese servidor.

Para utilizar este comando es necesario habilitar esta característica, ya que si se usa mal, puede dañar seriamente tu instalación:

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

Ejemplo de uso:

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

XP Procedures - xp_cmdshell
Procedimientos XP - xp_cmdshell

XP Procedures - xp_cmdshell_2
Procedimientos XP - xp_cmdshell_2

sql server clr xp procedimientos extendidos dll nativo

sql server clr xp procedimientos extendidos dll nativo