CREATE VIEW Metadata.ExpressionDependencyColumns
AS
SELECT otd.CreateDefinition AS RingTypeName,
ed.referencing_class_desc COLLATE SQL_Latin1_General_CP1_CI_AS AS RingClassDesc,
ISNULL(QUOTENAME(sd.NAME) + '.', '') + QUOTENAME(ISNULL(od.name, tr.name)) AS RingFQN,
sd.name AS RingSchema,
ISNULL(od.name, tr.name) AS RingName,
cd.name AS RingColumn,
otg.CreateDefinition AS RedTypeName,
ed.referenced_class_desc COLLATE SQL_Latin1_General_CP1_CI_AS AS RedClassDesc,
ISNULL(QUOTENAME(ed.referenced_server_name) + '.', '') + ISNULL(QUOTENAME(ed.referenced_database_name) + '.', '') + QUOTENAME(ed.referenced_schema_name)
+ '.' + QUOTENAME(ed.referenced_entity_name) AS RedFQN,
ed.referenced_server_name AS RedServer,
ed.referenced_database_name AS RedDatabase,
ed.referenced_schema_name AS RedSchema,
ed.referenced_entity_name AS RedName,
cg.name AS RedColumn,
ed.is_schema_bound_reference AS IsSchemaBound,
ed.is_caller_dependent AS IsCallerDependent,
ed.is_ambiguous AS IsAmbiguous,
od.type COLLATE SQL_Latin1_General_CP1_CI_AS AS RingType,
ed.referencing_id AS RingId,
ed.referencing_minor_id AS RingMinorId,
ed.referencing_class AS RingClass,
og.type COLLATE SQL_Latin1_General_CP1_CI_AS AS RedType,
ed.referenced_id AS RedId,
ed.referenced_minor_id AS RedMinorId,
ed.referenced_class AS RedClass
FROM sys.sql_expression_dependencies ed (NOLOCK)
LEFT OUTER JOIN sys.objects od (NOLOCK) ON od.OBJECT_ID = ed.referencing_id
LEFT OUTER JOIN sys.triggers tr (NOLOCK) ON tr.OBJECT_ID = ed.referencing_id
AND od.OBJECT_ID IS NULL
LEFT OUTER JOIN sys.schemas sd (NOLOCK) ON sd.SCHEMA_ID = od.SCHEMA_ID
LEFT OUTER JOIN Util.dbo.SystemObjectTypes otd ON ISNULL(od.type, tr.type) = otd.Type COLLATE SQL_Latin1_General_CP1_CI_AS
LEFT OUTER JOIN sys.columns cd (NOLOCK) ON ed.referencing_class = 1
AND cd.OBJECT_ID = ed.referencing_id
AND cd.column_id = ed.referencing_minor_id
AND ed.referencing_minor_id > 0
LEFT OUTER JOIN sys.objects og (NOLOCK) ON og.OBJECT_ID = ed.referenced_id
LEFT OUTER JOIN sys.schemas sg (NOLOCK) ON sg.SCHEMA_ID = og.SCHEMA_ID
LEFT OUTER JOIN Util.dbo.SystemObjectTypes otg ON og.type = otg.Type COLLATE SQL_Latin1_General_CP1_CI_AS
LEFT OUTER JOIN sys.columns cg (NOLOCK) ON ed.referenced_class = 1
AND cg.OBJECT_ID = ed.referenced_id
AND cg.column_id = ed.referenced_minor_id
AND ed.referenced_minor_id > 0
WHERE ed.referenced_minor_id > 0
OR ed.referencing_minor_id > 0