я должен был сделать что-то подобное когда-то, и в конечном итоге, используя что-то похожее на это:
SELECT
T.name
,C1.name
,C2.Name
FROM sys.Tables T
INNER JOIN sys.Columns C1
ON C1.object_id = T.object_id
CROSS APPLY
(
SELECT OBJECT_NAME(CX.object_id) + '.' + CX.Name AS Name
FROM sys.Tables TX
INNER JOIN sys.Columns CX
ON CX.object_id = TX.object_id
AND TX.is_ms_shipped = 0
WHERE CX.object_id <> T.object_id
AND CX.name = C1.name
AND CX.user_type_id = C1.user_type_id
) C2
;
Конечно, проблема с любым запросом, который мы можем опубликовать здесь является то, что это будет очень обобщенно, потому что мы не знакомы с вашей схемой. Вполне возможно, что, например, вы будете иметь таблицы, как эти:
T_Customers T_Shipments
ID | Name ID | Customer_ID
1 | George 1 | 1
2 | Jane 2 | 1
3 | John 3 | 3
В случае, такие, как, что, T_Shipments.Customer_ID
должны быть связаны с T_Customers.ID
, но не будет в этом запросе, поскольку имя отличается ,
Чтобы найти такие случаи, я позже изменил запрос, чтобы сделать второе сравнение с конкатенациями и поисками шаблонов. Не самый быстрый, но, безусловно, самый тщательный - мы нашли все виды вещей, о которых мы раньше не знали. К сожалению, я даже не могу догадаться, как выглядят ваши таблицы/атрибуты без большого количества подробностей.
Edit:
Пожалуйста, обратите внимание, что CROSS APPLY
включает в себя ссылку на user_type_id, потому что я не был заинтересован в то время в поиске столбцов, которые имели такое же имя, но были разными типами данных. Возможно, это не так, потому что вы можете удалить эту ссылку, если это не имеет значения.
Вы смотрели ИНФОРМАЦИЮ_SCHEMA.COLUMNS? –