SQL Server:不同表中的列之间的关系

时间:2019-01-04 00:17:46

标签: sql-server database

我想找到一种方法来理解两个不同表中存在的两个列之间是否存在关系。

例如,在表[Sales].[SalesOrderHeader]中,我有一列SalesOrderID,在另一个表[Person].[EmailAddress]中,有BusinessEntityID

如何检查是否有一个表在这两列之间建立关系?或者,如何确定这两列之间没有关系?

3 个答案:

答案 0 :(得分:0)

INFORMATION_SCHEMA是您要寻找的。您可以通过执行

来查看给定列是否在约束中使用
threat

您将不得不做一些额外的工作来专注于您的特定解决方案,但这是从这里开始。

答案 1 :(得分:0)

您可以执行以下一项操作来找到引用[Sales]。[SalesOrderHeader]的表:

EXEC sp_fkeys @pktable_name = N'SalesOrderHeader',@pktable_owner = N'Sales';

答案 2 :(得分:-1)

对于以下内容,我事先表示歉意:

    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