gpt4 book ai didi

sql-server - 如何查找特定行的外键依赖关系?

转载 作者:行者123 更新时间:2023-12-02 09:57:45 27 4
gpt4 key购买 nike

如果我有一张 table ,TableA:

Id
1
2
3
...

还有另外两个表:

表B:

Id, TableAId
1 1
2 1

表C:

Id, TableAId
1, 1
2, 2

其中TableAId是与TableA.Id的FK关系。

如何确定 TableA(ID 1)有三行指向它? TableA, Id 2 有一行指向它?更具体地说,我如何识别这些行是什么? (他们的表名和 ID)

最佳答案

您可以使用 INFORMATION_SCHEMA View 生成 select 语句来显示相关行。我仅针对问题中提供的表对此进行了测试,但它可以扩展以在键为多列的情况下工作。

declare @table_schema nvarchar(50) = 'dbo',
@table_name nvarchar(50) = 'TableA',
@id int = 1

select fk_col.TABLE_SCHEMA, fk_col.TABLE_NAME, fk_col.COLUMN_NAME,
'select * from ' + fk_col.TABLE_SCHEMA + '.' + fk_col.TABLE_NAME + ' t1 '
+ ' inner join ' + @table_schema + '.' + @table_name + ' t2 '
+ ' on t1.' + fk_col.COLUMN_NAME + ' = t2.' + pk_col.COLUMN_NAME
+ ' where t2.' + pk_col.COLUMN_NAME + ' = ' + cast(@id as nvarchar)

from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk

join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE pk_col
on pk.CONSTRAINT_SCHEMA = pk_col.CONSTRAINT_SCHEMA
and pk.CONSTRAINT_NAME = pk_col.CONSTRAINT_NAME

join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS fk
on pk.CONSTRAINT_SCHEMA = fk.UNIQUE_CONSTRAINT_SCHEMA
and pk.CONSTRAINT_NAME = fk.UNIQUE_CONSTRAINT_NAME

join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE fk_col
on fk_col.CONSTRAINT_SCHEMA = fk.CONSTRAINT_SCHEMA
and fk_col.CONSTRAINT_NAME = fk.CONSTRAINT_NAME

where pk.TABLE_SCHEMA = @table_schema
and pk.TABLE_NAME = @table_name
and pk.CONSTRAINT_TYPE = 'PRIMARY KEY'

生成的选择语句:

select * from dbo.TableB t1  inner join dbo.TableA t2  on t1.TableAId = t2.Id where t2.Id = 1
select * from dbo.TableC t1 inner join dbo.TableA t2 on t1.TableAId = t2.Id where t2.Id = 1

以及查询结果:

Id          TableAId    Id
----------- ----------- -----------
1 1 1
2 1 1

Id TableAId Id
----------- ----------- -----------
1 1 1

关于sql-server - 如何查找特定行的外键依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7616149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com