Consultas útiles SQL Server

Muchas veces necesitamos conocer las tablas, campos, claves, etc. de una base de datos en concreto, todos estos datos están disponibles en tablas de sistema de SQL Server, veamos algunos ejemplos.

sqlserver2012_v23

Devolver las tablas de la base de datos actual con sus claves primarias

SELECT i1.TABLE_NAME, 
i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'

Devolver los campos de una tabla concreta que son claves foráneas y la tabla a la que hace referencia

SELECT CU.COLUMN_NAME,
PK.TABLE_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
WHERE FK.TABLE_NAME = ?

Devolver el tipo de cada campo de una tabla concreta tal y como lo vemos en el SQL Server Managment Studio (como una cadena)

SELECT SYSCOLUMNS.name,
SYSTYPES.name
FROM SYSOBJECTS
INNER JOIN SYSCOLUMNS ON SYSOBJECTS.ID = SYSCOLUMNS.ID
INNER JOIN SYSTYPES ON SYSTYPES.xtype = SYSCOLUMNS.xtype
WHERE SYSOBJECTS.name = ?
ORDER BY SYSCOLUMNS.colorder

Devolver el nombre de todos los campos no nulos de una tabla concreta

SELECT SYSCOLUMNS.name
FROM SYSOBJECTS
INNER JOIN SYSCOLUMNS ON SYSOBJECTS.ID = SYSCOLUMNS.ID
WHERE SYSOBJECTS.name = ?
AND SYSCOLUMNS.isnullable = 0

Devolver los valores por defecto de todos los campos de una tabla

SELECT SYSCOLUMNS.name,
c1.definition
FROM SYSOBJECTS
INNER JOIN SYSCOLUMNS ON SYSOBJECTS.ID = SYSCOLUMNS.ID
INNER JOIN sys.default_constraints c1 ON c1.object_id = SYSCOLUMNS.cdefault
WHERE SYSOBJECTS.name = ?

¿Se os ocurre alguna otra?

Comentarios