List Foreign Keys, Parent and Referenced Columns

SELECT fk.name AS ForeignKey_Name, ob.name AS ParentTableName, col.name AS ParentColName, ob2.name AS ReferencedTableName,
RCol.name AS ReferenceColName
FROM sys.foreign_keys AS fk
INNER JOIN sys.objects AS ob ON fk.parent_object_id = ob.object_id
CROSS JOIN sys.objects AS ob2
INNER JOIN sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN sys.COLUMNS AS COL ON col.object_id = fk.parent_object_id
AND col.column_id = fkc.parent_column_id
INNER JOIN sys.COLUMNS AS RCol ON rCol.object_id = fk.referenced_object_id
AND RCol.column_id = fkc.referenced_column_id
WHERE fk.referenced_object_id = ob2.object_id

Here is the same query again but using System Functions for the table and column names

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