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.
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