¿Cómo enumero todos los FK en una base de datos sqlserver?¿Es posible enumerar todas las claves foráneas en una base de datos?
Respuesta
Uso esta afirmación, parece funcionar bastante bien.
SELECT RC.CONSTRAINT_NAME FK_Name
, KF.TABLE_SCHEMA FK_Schema
, KF.TABLE_NAME FK_Table
, KF.COLUMN_NAME FK_Column
, RC.UNIQUE_CONSTRAINT_NAME PK_Name
, KP.TABLE_SCHEMA PK_Schema
, KP.TABLE_NAME PK_Table
, KP.COLUMN_NAME PK_Column
, RC.MATCH_OPTION MatchOption
, RC.UPDATE_RULE UpdateRule
, RC.DELETE_RULE DeleteRule
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME
Teóricamente, esto es difícil. El modelo relacional permite que cualquier campo se relacione con cualquier otro campo. Los que realmente se usan están definidos por todas las declaraciones SELECT posibles que podrían usarse.
Prácticamente, depende de cuántas tablas tengan incluidas las definiciones FK. Si alguien se molestó en definir cuidadosamente todas las referencias FK, y las declaraciones SELECT se apegan a estas reglas, puede consultarlas.
Sin embargo, desde una instrucción SELECT puede unirse en cualquier cosa, no hay garantía de que tiene menos que también haya todas las instrucciones SELECT todo de FK.
Editar.
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
podría funcionar para usted.
Todas las claves externas definidas se definen. ¿Cómo consultaría las claves extranjeras definidas? –
Esto no es de ninguna manera una respuesta a la pregunta. Una clave externa es una cosa real, un objeto en la base de datos (o al menos una propiedad de un objeto). La pregunta no pide enumerar todas las columnas posibles a las que se puede unir, eso no tendría ningún sentido –
@Byron Whitlock: "Todos" rara vez significa todo, por lo general significa "Todo excepto por unas pocas excepciones". –
También puede utilizar el esquema INFORMATION_SCHEMA canónica en SQL Server 2005 en adelante:
How to find foreign key dependencies in SQL Server?
Esto funcionará en otra base de datos también.
utilizo http://technet.microsoft.com/en-us/library/ms189807.aspx
SELECT * FROM sys.foreign_keys
Esto es, si usted está en al menos SQL Server 2005 + y desea ver una lista de los nombres de FK.
Pero es probable que desee saber más acerca de las tablas que están relacionadas también, ¿no es así ?, de ahí la respuesta es útil.
Aquí es una manera más informativa de presentarlo
SELECT DISTINCT PARENT_TABLE =
RIGHT(Replace(TC.constraint_name, 'FK_', ''),
Len(Replace(TC.constraint_name, 'FK_', '')) - Charindex('_', Replace(TC.constraint_name, 'FK_', ''))),
CHILD_TABLE = TC.table_name,
CU.column_name,
TC.constraint_name,
TC.constraint_type
FROM information_schema.table_constraints TC
INNER JOIN information_schema.constraint_column_usage CU
ON TC.constraint_name = CU.constraint_name
WHERE TC.constraint_type LIKE '%foreign'
OR TC.constraint_type LIKE '%foreign%'
OR TC.constraint_type LIKE 'foreign%'
- 1. Lista SQLite TODAS las claves foráneas en una base de datos
- 2. Claves foráneas en la base de datos web2py
- 3. Cómo enumerar todas las claves externas con "WITH NOCHECK" en SQL Server
- 4. ¿Es posible enumerar todas las variables globales en PHP?
- 5. Claves foráneas en MySQL?
- 6. ¿Ve todas las tablas que tienen claves foráneas a cierta columna en una tabla?
- 7. Obtener una lista de todas las claves primarias en una base de datos
- 8. Claves foráneas vs partición
- 9. Fingiendo actualizaciones de claves foráneas usando las claves de entidad
- 10. ¿Están las claves foráneas indexadas automáticamente en SQL Server?
- 11. Herencia + Claves foráneas
- 12. mysql - Claves foráneas mutuamente dependientes
- 13. Dos claves foráneas en lugar de primaria
- 14. MySQL encuentra claves foráneas no válidas
- 15. Eliminar una fila de SQL ignorando todas las claves y restricciones foráneas
- 16. Claves foráneas con ActiveRecord de Rails :: ¿Migración?
- 17. ¿Es una práctica común para las aplicaciones PHP/MySQL tener claves foráneas declaradas?
- 18. Cómo aplicar claves foráneas en bases de datos NoSql (MongoDB)?
- 19. ¿Cómo encontrar todas las tablas que tienen claves foráneas que hacen referencia a table.column particular y tienen valores para esas claves foráneas?
- 20. Listar todas las tablas en una base de datos
- 21. enumere todas las tablas en una base de datos con MySQLi
- 22. Las claves foráneas deben ser Index en mySQL?
- 23. ¿Cómo puedo enumerar todas las columnas de una tabla?
- 24. ¿Pueden las claves foráneas dañar el rendimiento de la consulta?
- 25. MySQL: ¿Cómo determinar las relaciones de claves foráneas mediante programación?
- 26. Base de datos por aplicación VS Una gran base de datos para todas las aplicaciones
- 27. Claves foráneas en esquemas alternativos con Oracle?
- 28. ¿Es útil agregar una máscara de bits a todas las tablas en una base de datos?
- 29. ¿Es posible crear una base de datos usando NHibernate?
- 30. Cómo enumerar todas las propiedades de clase
¡Ten cuidado! 'INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS' omite algunas claves externas que' sys.foreign_keys' devuelve (en mi caso, una clave externa con 'Enforce For Replication' establecido en' No'. Terminé usando esta respuesta en su lugar: http: // stackoverflow. com/a/10697248/14731 – Gili
¡Dios te bendiga por haberme salvado hoy! ¡No podía entender esto! – LearnByReading