Las herramientas como SQL Server Management Studio facilitan mucho la administración y el desarrollo con SQL Server con multitud de funciones, asistentes y exploradores que permiten realizar fácilmente muchas de las tareas del día a día de administradores y desarrolladores de SQLServer.
Aún así, siempre hay información y acciones que se pueden realizar de manera más rápida, o más personalizada, o que simplemente con la parte visual no se pueden obtener. Son comandos y/o con consultas SQL ejecutadas desde una hoja de consultas, por ejemplo.
Iré recogiendo en este post muchas de esas consultas que a mi en muchas ocasiones me han resultado útiles, o que vea que pueden ayudarme a mi o a los demás en el futuro.
La mayor parte de estas queries se realizan utilizando las DMV, o Dynamic Management Views, y las DMF, o Dynamic Management Functions de SQL Server, que proporcionan información sobre la base de datos, sesiones, conexiones, estado, almacenamiento, índices..
También incluyo llamadas a stored procedures de sistema sys.sp_[StoredProcedure] que proporcionan igualmente información o utilidades para actuar sobre la base de datos.
Para comenzar, nada mejor que una consulta para ver cuáles son las DMV's o DMF's que nos proporciona SQL Server:
-- Listar objetos DMO (DMV/DMF) de la base de datos SELECT name, type, type_desc FROM sys.system_objects WHERE name LIKE 'dm_%' ORDER BY type desc, name
Consultas para obtener información sobre conexiones y sesiones
-- Información sobre las conexiones actuales select * from sys.dm_exec_connections
-- Información sobre las sesiones actuales SELECT * FROM sys.dm_exec_sessions
-- Información combinada conexiones y sesiones select * FROM sys.dm_exec_sessions s INNER JOIN sys.dm_exec_connections c ON s.session_id = c.session_id -- WHERE s.is_user_process = 1
Aunque también hay otras maneras de obtener información sobre sesiones y procesos, y también bloqueos:
-- Información sobre sesiones/procesos actuales exec sp_who2
-- Deadlocks actuales en la base de datos SELECT xdr.value('@timestamp', 'datetime') AS [Date], xdr.query('.') AS [Event_Data] FROM (SELECT CAST([target_data] AS XML) AS Target_Data FROM sys.dm_xe_session_targets AS xt INNER JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address WHERE xs.name = N'system_health' AND xt.target_name = N'ring_buffer' ) AS XML_Data CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xdr) ORDER BY [Date] DESC
-- Espacio ocupado por la base de datos de la conexión EXEC sp_spaceused @updateusage = 'FALSE', @mode = 'ALL', @oneresultset = '1';
-- Espacio físico ocupado por una tabla EXEC sp_spaceused @objname = 'TABLE', @updateusage = 'FALSE', @mode = 'ALL', @oneresultset = '0'
Consultas SQL útiles para tratar y transformar cadenas y datos
-- Query que hace un split de los campos de un string en formato CSV o similar separados por ';'
DECLARE @cadenaCSV varchar(50)= 'Valor.Campo1; Valor.Campo2; Valor.Campo3' SELECT REPLACE(REVERSE(PARSENAME(REPLACE(REVERSE(REPLACE(@cadenaCSV,'.','||')), ';', '.'), 1)),'||','.') AS Campo1 , REPLACE(REVERSE(PARSENAME(REPLACE(REVERSE(REPLACE(@cadenaCSV,'.','||')), ';', '.'), 2)),'||','.') AS Campo2 , REPLACE(REVERSE(PARSENAME(REPLACE(REVERSE(REPLACE(@cadenaCSV,'.','||')), ';', '.'), 3)),'||','.') AS Campo3
Seguiré ampliando esta recopilación de consultas útiles para tenerlas siempre 'a mano' cuando se necesiten.
Si quieres contribuir con alguna query de SQL Server que te sea de utilidad y pienses que también puede serlo a los demás puedes añadirla con un comentario de este mismo post.
Saludos!