Consulta tablas del sistema SQL2005...!

23/08/2007 - 18:27 por AlejoR | Informe spam
Necesito armar un query que me retorne por cada tabla de usuario, la
informacion correspondiente a sus llaves foraneas.
Es decir, los Nombres de columnas correspondientes a las llaves foraneas,
con los nombres de columnas correspondientes
a donde sn primarias.
El siguiente query funciona siempre y cuando no hayan llaves foraneas
compuestas y esto se debe a que para esos
casos en la tabla SYSCONSTRAINTS, me devuelve un solo registro y la columna
colid ofrece un 0.
En cambio deberia ofrecer tantos registros como columnas componen la llave
foranea.

Este es el query


SELECT tabFK.NAME Name_TabFK,
sys.foreign_keys.NAME Name_ConstFK, COL_FK.NAME Name_ColFK,
tabPK.NAME Name_TabPK , COL_PK.NAME Name_ColPK
FROM SYSOBJECTS tabFK , SYSCONSTRAINTS, syscolumns COL_FK, sys.foreign_keys
,
SYSOBJECTS tabPK , sys.sysindexkeys, syscolumns COL_PK
WHERE tabFK.NAME LIKE 'ETNIAS_UBICACION_COMUNIDAD' AND
tabFK.ID = SYSCONSTRAINTS.ID AND
SYSCONSTRAINTS.id = COL_FK.ID AND SYSCONSTRAINTS.colid = COL_FK.colid AND
sys.foreign_keys.parent_object_id = tabFK.ID AND sys.foreign_keys.object_id
= SYSCONSTRAINTS.constid and
tabPK.id = referenced_object_id and
sys.sysindexkeys.id = tabPK.id and
COL_PK.ID = tabPK.id and COL_PK.COLID = sys.sysindexkeys.COLID AND
tabFK.TYPE= 'U' and --Tablas de usuario
SYSCONSTRAINTS.colid<>0


Gracias por cualquier comentario al respecto
 

Leer las respuestas

#1 Salvador Ramos
23/08/2007 - 19:20 | Informe spam
Hola,

Aquí tienes un script que hace lo que indicas (sólo válido para SQL Server
2005)
http://www.sqlservercentral.com/scr...p?scriptid56

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm


"AlejoR" escribió en el mensaje
news:%
Necesito armar un query que me retorne por cada tabla de usuario, la
informacion correspondiente a sus llaves foraneas.
Es decir, los Nombres de columnas correspondientes a las llaves foraneas,
con los nombres de columnas correspondientes
a donde sn primarias.
El siguiente query funciona siempre y cuando no hayan llaves foraneas
compuestas y esto se debe a que para esos
casos en la tabla SYSCONSTRAINTS, me devuelve un solo registro y la
columna colid ofrece un 0.
En cambio deberia ofrecer tantos registros como columnas componen la llave
foranea.

Este es el query


SELECT tabFK.NAME Name_TabFK,
sys.foreign_keys.NAME Name_ConstFK, COL_FK.NAME Name_ColFK,
tabPK.NAME Name_TabPK , COL_PK.NAME Name_ColPK
FROM SYSOBJECTS tabFK , SYSCONSTRAINTS, syscolumns COL_FK,
sys.foreign_keys ,
SYSOBJECTS tabPK , sys.sysindexkeys, syscolumns COL_PK
WHERE tabFK.NAME LIKE 'ETNIAS_UBICACION_COMUNIDAD' AND
tabFK.ID = SYSCONSTRAINTS.ID AND
SYSCONSTRAINTS.id = COL_FK.ID AND SYSCONSTRAINTS.colid = COL_FK.colid AND
sys.foreign_keys.parent_object_id = tabFK.ID AND
sys.foreign_keys.object_id = SYSCONSTRAINTS.constid and
tabPK.id = referenced_object_id and
sys.sysindexkeys.id = tabPK.id and
COL_PK.ID = tabPK.id and COL_PK.COLID = sys.sysindexkeys.COLID AND
tabFK.TYPE= 'U' and --Tablas de usuario
SYSCONSTRAINTS.colid<>0


Gracias por cualquier comentario al respecto

Preguntas similares