¿Cómo puedo encontrar todas las dependencias de clave externa en una columna en particular?
¿Cuáles son las diferentes alternativas (gráficamente en SSMS, consultas / vistas en SQL Server, herramientas de bases de datos de terceros, código en .NET)?
.net
sql-server
foreign-keys
Incluso Mien
fuente
fuente
tratar:
sp_help [table_name]
obtendrá toda la información sobre la tabla, incluidas todas las claves externas
fuente
sp_fkeys [table]
sp_fkeys @fktable_name='TableName'
Si planea eliminar o renombrar una tabla o columna, encontrar solo dependencias de claves externas podría no ser suficiente.
Tablas de referencia que no están conectadas con clave externa : también deberá buscar tablas de referencia que no estén conectadas con clave externa (he visto muchas bases de datos con un diseño incorrecto que no tenían claves externas definidas pero que sí tenían datos relacionados ) La solución podría ser buscar el nombre de la columna en todas las tablas y buscar columnas similares.
Otros objetos de la base de datos : es probable que esto esté un poco fuera de tema, pero si estaba buscando todas las referencias, también es importante verificar los objetos dependientes.
Herramientas GUI: pruebe la opción "Buscar objetos relacionados" de SSMS o herramientas como ApexSQL Search (herramienta gratuita, se integra en SSMS) para identificar todos los objetos dependientes, incluidas las tablas conectadas con clave externa.
fuente
Debido a que su pregunta está dirigida a una sola tabla, puede usar esto:
Lo encontré en SO aquí:
https://stackoverflow.com/a/12956348/652519
Encontré la información que necesitaba con bastante rapidez. Enumera la tabla, la columna y el nombre de la clave externa.
EDITAR
Aquí hay un enlace a la documentación que detalla los diferentes parámetros que se pueden usar: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-fkeys-transact-sql
fuente
Creo que este script es menos costoso:
fuente
Uno que realmente me gusta usar se llama SQL Dependency Tracker de Red Gate Software . Puede colocar cualquier objeto de la base de datos, como tablas, procedimientos almacenados, etc., y luego dibujará automáticamente las líneas de relación entre todos los otros objetos que dependen de los elementos seleccionados.
Da una muy buena representación gráfica de las dependencias en su esquema.
fuente
Muchas gracias a John Sansom, su consulta es excelente.
Además: debe agregar "AND PT.ORDINAL_POSITION = CU.ORDINAL_POSITION" al final de su consulta.
Si tiene varios campos en la clave primaria, esta instrucción coincidirá con los campos correspondientes entre sí (tuve el caso, su consulta creó todas las combinaciones, por lo que para 2 campos en la clave primaria, obtuve 4 resultados para la clave externa correspondiente) .
(Lo siento, no puedo comentar la respuesta de John ya que no tengo suficientes puntos de reputación).
fuente
Esta consulta devolverá detalles sobre claves foráneas en una tabla, admite múltiples claves de columna.
fuente
Después de una larga búsqueda, encontré una solución de trabajo. Mi base de datos no utiliza las columnas sys.foreign_key_columns y information_schema.key_column_usage solo contiene claves principales.
Yo uso SQL Server 2015
SOLUCIÓN 1 (raramente utilizada)
Si otras soluciones no funcionan, esto funcionará bien:
SOLUCIÓN 2 (de uso común)
En la mayoría de los casos, esto funcionará bien:
fuente
Puede usar INFORMATION_SCHEMA.KEY_COLUMN_USAGE y sys.foreign_key_columns para obtener los metadatos de clave externa para una tabla, es decir, nombre de restricción, tabla de referencia y columna de referencia, etc.
A continuación se muestra la consulta:
fuente
Solo una nota para la respuesta de @ "John Sansom",
Si se buscan las dependencias de clave externa , creo que la cláusula PT Where debería ser:
y es la condición ON :
Como comúnmente se usa la clave principal de la tabla externa, creo que este problema no se ha notado antes.
fuente
Te dará:
El propio esquema FK al que pertenece el FK
fuente
USE información_esquema;
fuente