SQL如何查询引用特定外键值的表?

Cod*_*ien 5 sql sql-server foreign-keys sql-server-2012

我有A一个IDB,C,D...,列上有一个主键,表有一个或多个具有外键关系的列A.ID.

如何编写一个查询,向我显示包含17主键特定值(例如)的所有表?

我想拥有通用的sql代码,它可以获取表名和主键值,并显示通过外键引用该特定值的所有表.

结果应该是表名列表.

我正在使用MS SQL 2012.

i-o*_*one 1

这不是理想的,但应该返回需要的内容(表列表):

declare @tableName sysname, @value sql_variant

set @tableName = 'A'
set @value = 17

declare @sql nvarchar(max)

create table #Value (Value sql_variant)
insert into #Value values (@value)

create table #Tables (Name sysname, [Column] sysname)
create index IX_Tables_Name on #Tables (Name)

set @sql = 'declare @value sql_variant
select @value = Value from #Value

'
set @sql = @sql + replace((
select
    'insert into #Tables (Name, [Column])
select ''' + quotename(S.name) + '.' + quotename(T.name) + ''', ''' + quotename(FC.name) + '''
where exists (select 1 from ' + quotename(S.name) + '.' + quotename(T.name) + ' where ' + quotename(FC.name) + ' = @value)
'
from
    sys.columns C
    join sys.foreign_key_columns FKC on FKC.referenced_column_id = C.column_id and FKC.referenced_object_id = C.object_id
    join sys.columns FC on FC.object_id = FKC.parent_object_id and FC.column_id = FKC.parent_column_id
    join sys.tables T on T.object_id = FKC.parent_object_id
    join sys.schemas S on S.schema_id = T.schema_id
where
    C.object_id = object_id(@tableName)
    and C.name = 'ID'
order by S.name, T.name
for xml path('')), '
', CHAR(13))

--print @sql
exec(@sql)

select distinct Name
from #Tables
order by Name

drop table #Value
drop table #Tables
Run Code Online (Sandbox Code Playgroud)