Buenos blogs sobre SQL

Hoy al estar buscando la solución a un generador de código que solo era capaz de trabajar con MySql y que ahora se requiere funcione con SqlServer.

Me tope con varios problemas, da la casualidad que en estos 2 manejadores las consultas a los metadatos se realizan de una manera muy diferente (era de suponerse) .

basicamente los 3 problemas que encontre fuerón.

  • Conocer los campos de una tabla.
  • Conocer las PK de la tabla
  • Conocer las FK de la tabla

Esto con MySql se obtiene con la consulta.(Las tres opciones)

describe NombreTabla;

En cambio en SqlServer es un poco mas complejo.
Conocer los campos de una tabla.

 SELECT sc.name
 FROM sys.objects so INNER JOIN sys.columns sc ON so.[object_id]=sc.[object_id]
 WHERE so.name='Tabla'

Conocer las PK de la tabla

 SELECT i.name AS IndexName,OBJECT_NAME(ic.OBJECT_ID) AS TableName,COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName
 FROM sys.indexes AS i INNER JOIN sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id
 WHERE i.is_primary_key = 1
 and OBJECT_NAME(ic.OBJECT_ID) = 'Tabla'

Conocer las FK de la tabla

 SELECT fk.name AS FK,
        OBJECT_NAME(fk.parent_object_id) AS TableName,
        COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName,
        OBJECT_NAME (fk.referenced_object_id) AS ReferenceTableName,
        COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
 FROM sys.foreign_keys AS fk
 INNER JOIN sys.foreign_key_columns AS fc ON fk.OBJECT_ID = fc.constraint_object_id
 where OBJECT_NAME(fk.parent_object_id) = 'Tabla'

Estas consultas me fuerón de mucha utilidad. Las consultas las encontre en estos 2 Blogs que la verdad suenan muy interesantes y en mi caso me sirvierón bastante.

via : http://blog.sqlauthority.com

via : http://sqlpsykrest.wordpress.com

Escribe un comentario