List Foreign Keys, Parent and Referenced Columns

SELECT AS ForeignKey_Name, AS ParentTableName, AS ParentColName, AS ReferencedTableName, 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 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