Queries útiles para SQL Server

En este artículo incluyó una recopilación de Queries SQL Server que pueden ser útiles para resolver algún problema específico en un momento dado. Yo como programador suelo tener notas con algunos códigos interesantes o bien complejos que sé que puedo llegar a necesitar en algún otro momento.

Por lo tanto decidí convertir mis notas sobre SQL Server en un post ya que puede ser útil para alguien más.

A fin de intentar ordenarlas un poco las separé en tres categorías diferentes, la primera Consultas para aplicar sobre tablas, vistas y procedimientos almacenados las cuales van enfocadas sobre todo en temas de tamaños, constraints, etc.

La segunda categoría corresponde a Query’s con Fechas en este caso solo incluí 4 query’s muy específicas que me han sido útiles en alguna oportunidad y espero les puedan ser a alguien más.

Y por último de Servidor que serían solo 2 una para determinar el espacio libre restante en los discos duros del servidor de base de datos y otro para obtener el Sesion Id actual.

Queries para tablas, vistas y procedimientos almacenados

    • Retornar tamaño de las tablas
SELECT
  sob.name AS TableName,
  SUM(sys.length) / 1024 AS [Size MB],
  SUM(sys.length) AS [Size B]
FROM sysobjects sob,
     syscolumns sys
WHERE sob.xtype = 'u'
AND sys.id = sob.id
GROUP BY sob.name
    • Retornar Constraints de una tabla
SELECT
DISTINCT
  Constraint_Name AS ConstraintName,
  Table_Schema AS SchemaName,
  Table_Name AS TableName
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE table_name = 'Table Name'
    • Retornar todas las columnas que tienen alguna Constraint
SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE TABLE_NAME = 'Table Name'
    • Activar/Desactivar Constraints de una tabla
ALTER TABLE Autos CHECK CONSTRAINT ALL
ALTER TABLE Autos NOCHECK CONSTRAINT ALL
    • Activar/Desactivar todos los triggers de una tabla
ALTER TABLE TableName ENABLE TRIGGER ALL 
ALTER TABLE TableName DISABLE TRIGGER ALL
    • Activar/Desactivar un trigger específico de una tabla
ALTER TABLE TableName ENABLE TRIGGER TriggerName
ALTER TABLE TableName DISABLE TRIGGER TriggerName
    • Retornar todas las columnas de una tabla filtrando por Data Type
SELECT
  *
FROM (SELECT
  OBJECT_NAME(c.OBJECT_ID) AS TableName,
  c.name AS Column_Name
FROM sys.columns AS c
JOIN sys.types AS t
  ON c.user_type_id = t.user_type_id
WHERE t.name = 'int') AS RESULT
WHERE RESULT.TableName = 'Table Name'
    • Retornar columnas marcadas como Nullables.
SELECT
  OBJECT_NAME(c.OBJECT_ID) AS TableName,
  c.name AS ColumnName
FROM sys.columns AS c
JOIN sys.types AS t
  ON c.user_type_id = t.user_type_id
WHERE c.is_nullable = 1
AND OBJECT_NAME(c.OBJECT_ID) = 'Table Name'

Si cambiamos c.is_nullable=0 retorna todas las columnas no nullables.

    • Retornar todas las tablas que no tienen PK
SELECT
  name AS TableName
FROM sys.tables
WHERE OBJECTPROPERTY(OBJECT_ID, 'TableHasPrimaryKey') = 0
ORDER BY TableName
    • Retornar todas las tablas que no tienen FK
SELECT
  name AS TableName
FROM sys.tables
WHERE OBJECTPROPERTY(OBJECT_ID, 'TableHasPrimaryKey') = 0
ORDER BY TableName
    • Retornar todas las tablas que no tienen Identity
SELECT
  name AS TableName
FROM sys.tables
WHERE OBJECTPROPERTY(OBJECT_ID, 'TableHasIdentity') = 0
ORDER BY TableName
    • Retornar todas las tablas que tienen vistas
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
    • Retornar todas las columnas que están siendo usadas por una vista
SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 
WHERE TABLE_NAME = 'Table Name'
    • Reiniciar Identity de una tabla
DBCC CHECKIDENT ('Table Name', RESEED, 0)
    • Listar tablas y cantidad de filas de una base de datos
SELECT
  t.name AS TableName,
  i.rows AS RowsCount
FROM sys.tables AS t
INNER JOIN sys.sysindexes AS i
  ON t.object_id = i.id
  AND i.indid < 2
ORDER BY i.rows DESC
    • Recompilar procedimiento almacenado
EXEC sp_recompile'SPName'
    • Recompilar todos los procedimientos almacenados de una tabla
EXEC sp_recompile N'TableName'

Queries para fechas

    • Retornar primer día del mes actual
SELECT CONVERT(VARCHAR(10),
DATEADD(DAY,-(DAY(GETDATE()))+1,
GETDATE()),105) FirstDate
    • Primer día del mes siguiente
SELECT CONVERT(VARCHAR(10),
DATEADD(DAY,-(DAY(GETDATE())), 
DATEADD(MONTH,1,GETDATE())+1),105) FirstDateNextMount
    • Último día del mes actual
SELECT CONVERT(VARCHAR(25),
DATEADD(DAY,-(DAY(GETDATE())), 
DATEADD(MONTH,1,GETDATE())),105) LastDateMonth
    • Último día del mes anterior
SELECT CONVERT(VARCHAR(10),
DATEADD(DAY,-(DAY(GETDATE())),
GETDATE()),105) LastDatePreviousMonth

Servidores

    • Retornar Session Id Actual
SELECT CONVERT(VARCHAR(10),
DATEADD(DAY,-(DAY(GETDATE())),
GETDATE()),105) LastDatePreviousMonth
    • Retornar espacio libre en MB de los discos duros
EXEC master..xp_fixeddrives