SQL Server: связь между столбцами в разных таблицах - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы найти способ понять, существует ли связь между двумя столбцами, присутствующими в двух разных таблицах.

Например, в таблице [Sales].[SalesOrderHeader] у меня есть столбец SalesOrderID, а в другой таблице [Person].[EmailAddress] - BusinessEntityID.

Как проверить, существует ли таблица, которая создает связь между этими 2 столбцами?Или как я могу быть уверен, что между этими двумя столбцами нет взаимосвязи?

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Можно выполнить одно из следующих действий, чтобы найти таблицы, ссылающиеся на [Sales]. [SalesOrderHeader]:

EXEC sp_fkeys @pktable_name = N'SalesOrderHeader',@pktable_owner = N'Sales';
0 голосов
/ 04 января 2019

Я прошу прощения перед рукой за то, что следует:

    create table #rels (rel_name varchar(max), matches int) declare @sql varchar(max) = '' select @sql+= char(10) + 'insert into #rels select ''' tbla + '.'  + col_a + '.' + tbl_b + '.' col_b ''' colrel, count(*) from ' + tbl_a + ' join ' + tbl_b + '  on cast(' + col_a + ' as varchar(max)) = cast(' + col_b + ' as varchar(max)) from ( select a.column_name col_a, object_name(a.object_id) tbl_a, b.column_name col_b, object_name(b.object_id) tbl_b from sys.columns a cross apply sys.columns b where  a.column_name <> b.column_name where a.system_type_id = b.system_type_id ) cols exec (@sql) select * from #rels where matches > 0 order by matches desc drop table #rels
0 голосов
/ 04 января 2019

INFORMATION_SCHEMA - это то, что вы ищете.Вы можете увидеть, используется ли данный столбец в ограничении, выполнив

SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = 'Person' AND COLUMN_NAME = 'BusinessEntityID'

Вам придется проделать дополнительную работу, чтобы сосредоточиться на вашем конкретном решении, но это то, с чего начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...