[SQL] Obtener las FK y sus relaciones de una Base de datos SQL 2005.

21 01 2009

El día de hoy un amigo me pregunto como ver las relaciones foráneas (FK) de una tabla(s) en SQL 2005 desde código y no en vista de diseño. Poniéndome a buscar encontré  algunos ejemplos, de los cuales considero el más eficaz. El siguiente ejemplo muestra como obtener las llaves foráneas en conjunto con sus relaciones a otras tablas en SQL Server 2005. Todo consiste en acceder al catalogo de sistema que contiene las llaves foráneas y el catalogo de columnas de las mismas llaves.

 

USE tuBaseDeDatos;
GO
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

@http://blog.sqlauthority.com/2007/09/04/sql-server-2005-find-tables-with-foreign-key-constraint-in-database/

En base al código anterior y para efectos de claridad prepare la siguiente consulta que obtiene el nombre de una relación foránea (FK) y el nombre de la columna la cual funciona como FK, todo esto a partir de una determinada tabla.

USE tuBaseDeDatos;
GO

DECLARE @tabName AS Varchar(50)
SET @tabName = 'dbo.TU_TABLA'--Nombre de la Tabla de la cual se obtendrán las FK's.

SELECT OBJECT_NAME(f.constid) AS 'FKName', c.name AS 'ColName'
FROM sysforeignkeys f
INNER JOIN syscolumns c ON f.fkeyid = c.id AND f.fkey = c.colid
WHERE fkeyid = OBJECT_ID(@tabName)

Espero les sea de ayuda. Dejen comentarios!!!








Seguir

Get every new post delivered to your Inbox.