referencial - relacionar tablas en sql server por codigo
Consulta las relaciones de clave externa de una tabla (7)
A continuación, le indicamos cómo llevar la consulta de Mike un paso más allá para obtener los nombres de las columnas de los nombres de las restricciones:
select * from user_cons_columns
where constraint_name in (
select constraint_name
from all_constraints
where constraint_type=''R''
and r_constraint_name in
(select constraint_name
from all_constraints
where constraint_type in (''P'',''U'')
and table_name=''<your table name here>''));
Para una tabla dada ''foo'', necesito una consulta para generar un conjunto de tablas que tienen claves foráneas que apuntan a foo. Estoy usando Oracle 10G.
Descargue la Guía de referencia de Oracle para 10G que explica las tablas del diccionario de datos.
Las respuestas anteriores son buenas, pero echa un vistazo a las otras tablas que pueden estar relacionadas con las limitaciones.
SELECT * FROM DICT WHERE TABLE_NAME LIKE ''%CONS%'';
Finalmente, obtenga una herramienta como Toad o SQL Developer que le permite navegar por este material en una interfaz de usuario, necesita aprender a usar las tablas pero también debe usar una interfaz de usuario.
Esto debería funcionar (o algo parecido):
select table_name
from all_constraints
where constraint_type=''R''
and r_constraint_name in
(select constraint_name
from all_constraints
where constraint_type in (''P'',''U'')
and table_name=''<your table here>'');
La siguiente declaración debe darles a los niños y a todos sus descendientes. Lo he probado en una base de datos Oracle 10.
SELECT level, main.table_name parent,
link.table_name child
FROM user_constraints main, user_constraints link
WHERE main.constraint_type IN (''P'', ''U'')
AND link.r_constraint_name = main.constraint_name
START WITH main.table_name LIKE UPPER(''&&table_name'')
CONNECT BY main.table_name = PRIOR link.table_name
ORDER BY level, main.table_name, link.table_name
Sé que es un poco tarde para responder, pero déjame responder de todos modos, algunas de las respuestas anteriores son bastante complicadas, por lo tanto, aquí hay una toma mucho más simple.
`SELECT a.table_name child_table, a.column_name child_column, a.constraint_name, b.table_name parent_table, b.column_name parent_column FROM all_cons_columns a JOIN all_constraints c ON a.owner = c.owner AND a.constraint_name = c.constraint_name join all_cons_columns b on c.owner = b.owner and c.r_constraint_name = b.constraint_name WHERE c.constraint_type = ''R'' AND a.table_name = ''your table name''`
enlace a la documentación en línea de Oracle Database
Es posible que desee explorar las vistas del diccionario de datos . Ellos tienen los prefijos:
- Usuario
- Todas
- DBA
muestra:
select * from dictionary where table_name like ''ALL%''
Continuando con el ejemplo de Mike, es posible que desee generar scripts para habilitar / deshabilitar las restricciones. Solo modifiqué el ''seleccionar'' en la primera fila.
select ''alter table '' || TABLE_NAME || '' disable constraint '' || CONSTRAINT_NAME || '';''
from all_constraints
where constraint_type=''R''
and r_constraint_name in
(select constraint_name
from all_constraints
where constraint_type in (''P'',''U'')
and table_name=''<your table here>'');
select distinct table_name, constraint_name, column_name, r_table_name, position, constraint_type
from (
SELECT uc.table_name,
uc.constraint_name,
cols.column_name,
(select table_name from user_constraints where constraint_name = uc.r_constraint_name)
r_table_name,
(select column_name from user_cons_columns where constraint_name = uc.r_constraint_name and position = cols.position)
r_column_name,
cols.position,
uc.constraint_type
FROM user_constraints uc
inner join user_cons_columns cols on uc.constraint_name = cols.constraint_name
where constraint_type != ''C''
)
start with table_name = ''&&tableName'' and column_name = ''&&columnName''
connect by nocycle
prior table_name = r_table_name
and prior column_name = r_column_name;