Puede usar las vistas INFORMATION_SCHEMA
para generar declaraciones seleccionadas para mostrar las filas en cuestión. Solo he probado esto en las tablas proporcionadas en la pregunta, pero podría ampliarse para que funcione en los casos en que las claves sean columnas múltiples.
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'
Las instrucciones select generadas:
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
y los resultados de la consulta:
Id TableAId Id
----------- ----------- -----------
1 1 1
2 1 1
Id TableAId Id
----------- ----------- -----------
1 1 1
Su objetivo no es del todo clara. ¿Desea encontrar los metadatos para identificar naves de realimentación de claves foráneas entre las tablas, o quiere las consultas TSql para encontrar los datos dado que ya conoce las relaciones de claves foráneas? – user957902
No me interesan los metadatos. En mi ejemplo, muestro cómo me interesa determinar las tablas y filas específicas que tienen dependencias en otra fila específica. Me gustaría obtener esa información sin escribir una declaración de selección (potencialmente) enorme que une todas las tablas posibles junto con la tabla de objetivos. –