Necesito eliminar una tabla altamente referenciada en una base de datos de SQL Server. ¿Cómo puedo obtener una lista de todas las restricciones de clave externa que necesitaré eliminar para descartar la tabla?
(Las respuestas SQL son preferibles a hacer clic en la GUI del estudio de administración).
sql
sql-server
tsql
chillitom
fuente
fuente
Respuestas:
No estoy seguro de por qué nadie sugirió, pero yo uso
sp_fkeys
para consultar claves externas para una tabla determinada:También puede especificar el esquema:
Sin especificar el esquema, los documentos indican lo siguiente:
fuente
Usaría la función de Diagramación de base de datos en SQL Server Management Studio, pero desde que lo descartó, esto funcionó para mí en SQL Server 2008 (no tengo 2005).
Para obtener una lista de los nombres de tabla y columna de referencia ...
Para obtener nombres de restricciones de clave externa
fuente
Esto te da:
Código a continuación:
fuente
order by
: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName, FkName yf) cambie el orden de la columna a: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName, FkName, FkColumnName, la mejor práctica / mejor convenciones y d / e para el uso más probable (listado de dependientes FK de aTable
).Prueba esto :
fuente
También debe tener en cuenta las referencias a otros objetos.
Si la tabla fue altamente referenciada por otras tablas, probablemente también sea altamente referenciada por otros objetos como vistas, procedimientos almacenados, funciones y más.
Realmente recomendaría una herramienta GUI como el cuadro de diálogo 'ver dependencias' en SSMS o una herramienta gratuita como ApexSQL Search esto porque buscar dependencias en otros objetos puede ser propenso a errores si desea hacerlo solo con SQL.
Si SQL es la única opción, puede intentar hacerlo así.
fuente
La pregunta original pedía obtener una lista de todas las claves externas en una tabla altamente referenciada para que la tabla se pueda eliminar.
Esta pequeña consulta devuelve todos los comandos 'soltar clave foránea' necesarios para soltar todas las claves foráneas en una tabla en particular:
Salida de ejemplo:
Omita la cláusula WHERE para obtener los comandos drop para todas las claves foráneas en la base de datos actual.
fuente
Aquí está el código SQL que usaría.
No es un SQL particularmente claro, así que veamos un ejemplo.
Entonces, suponiendo que quisiera dejar la
Employees
tabla en la amadaNorthwind
base de datos de Microsoft , pero SQL Server me dijo que una o más Claves extranjeras me impedían hacerlo.El comando SQL anterior devolvería estos resultados ...
Me muestra que hay 3 claves externas que hacen referencia a la
Employees
tabla. En otras palabras, no se me permitiría eliminar (soltar) esta tabla hasta que estas tres claves externas se eliminen por primera vez.En los resultados, la primera fila es cómo se mostraría la siguiente restricción de clave externa en los resultados.
La penúltima columna muestra el comando SQL que necesitaría usar para eliminar una de estas claves externas, por ejemplo:
... y la columna de la derecha muestra el SQL para crearlo ...
Con todos estos comandos, tiene todo lo que necesita para eliminar las claves externas relevantes para permitirle eliminar una tabla y luego volver a crearlas.
Uf. Espero que esto ayude.
fuente
fuente
La más simple es mediante el uso de sys.foreign_keys_columns en SQL. Aquí la tabla contiene los identificadores de objeto de todas las claves foráneas con su ID de columna referenciada ID de tabla referenciada, así como las columnas y tablas de referencia. Como el Id permanece constante, el resultado será confiable para modificaciones adicionales en el esquema, así como en las tablas.
Consulta:
También podemos agregar filtros usando 'where'
fuente
fuente
Estoy usando este script para encontrar todos los detalles relacionados con la clave externa. Estoy usando INFORMATION.SCHEMA. A continuación se muestra un script SQL:
fuente
primero
Luego usa NimbleText para jugar con tus resultados
fuente
Algunas buenas respuestas arriba. Pero prefiero tener la respuesta con una consulta. Este fragmento de código está tomado de sys.sp_helpconstraint (sys proc)
Esa es la forma en que Microsoft busca si hay claves externas asociadas a la tbl.
La respuesta se verá así: test_db_name.dbo.Account: FK_Account_Customer
fuente
select db_name() + '.' + schema_name(ObjectProperty(parent_object_id,'schemaid')) + '.' + object_name(parent_object_id) + ': ' + object_name(object_id) AS "FK Reference" from sys.foreign_keys where referenced_object_id = object_id('Customer')
Si desea obtener la relación de clave externa de todas las tablas, excluya la
where
cláusula; de lo contrario, escriba su nombre de tabla en lugar detablename
fuente
Esto solo muestra la relación si hay restricciones de clave externa. Aparentemente, mi base de datos es anterior a la restricción FK. Algunas tablas usan disparadores para imponer la integridad referencial, y a veces no hay nada más que una columna con un nombre similar para indicar la relación (y ninguna integridad referencial).
Afortunadamente, tenemos una escena de nomenclatura coherente, así que puedo encontrar tablas de referencia y vistas como esta:
Utilicé esta selección como base para generar un script que hace lo que necesito hacer en las tablas relacionadas.
fuente
Trabajando de lo que hizo @Gishu pude producir y usar el siguiente SQL en SQL Server 2005
Que muestra las tablas, columnas y nombres de claves foráneas, todo en 1 consulta.
fuente
Determinar claves primarias y claves únicas para todas las tablas en una base de datos ...
Esto debería enumerar todas las restricciones y al final puedes poner tus filtros
Para referencia, lea a través de - http://blogs.msdn.com/b/sqltips/archive/2005/09/16/469136.aspx
fuente
He estado usando esto en 2008 y hasta. Es similar a algunas otras soluciones enumeradas, pero los nombres de campo están en mayúsculas y minúsculas para manejar intercalaciones específicas de casos (LatBin). Además, puede alimentarlo con un solo nombre de tabla y recuperar solo la información de esa tabla.
fuente
Hay cómo obtener el recuento de todas las responsabilidades para la identificación seleccionada. Simplemente cambie el valor de @dbTableName, el valor de @dbRowId y su tipo (si int necesita eliminar '' en la línea no 82 (..SET @SQL = ..)). Disfrutar.
fuente
El servidor Mysql tiene
information_schema.REFERENTIAL_CONSTRAINTS
tabla FYI, puede filtrarlo por nombre de tabla o nombre de tabla referenciado.fuente
Lista de todas las claves externas que hacen referencia a una tabla determinada en SQL Server:
Puede obtener el nombre de la tabla de referencia y el nombre de la columna a través de la siguiente consulta ...
Y la siguiente captura de pantalla para su comprensión ...
fuente
Esto obtiene cualquier clave foránea que involucre la tabla elegida. * Asume un formato _FIRSTABLENAME_SECONDTABLENAME.
Esta es una forma más general:
fuente
La siguiente solución me funciona:
fuente
Puede encontrar a través de la consulta a continuación:
fuente
Intenta también.
con
sp_fkeys
usted puede filtrar el resultado no solo por el nombre y el esquema de la tabla pk, sino también por el nombre y el esquema de la tabla fk. enlacefuente
La respuesta más preferible por @BankZ
adicionalmente para diferentes esquemas
fuente