Si quiero eliminar todas las tablas de mi base de datos de esta manera, ¿se encargará de la restricción de clave externa? Si no, ¿cómo me encargo de eso primero?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Respuestas:
No, esto no eliminará su tabla si de hecho hay claves foráneas que la hacen referencia.
Para obtener todas las relaciones de clave externa que hacen referencia a su tabla, puede usar este SQL (si está en SQL Server 2005 y versiones posteriores):
y si hay alguna, con esta declaración aquí, podría crear instrucciones SQL para descartar esas relaciones FK:
fuente
En SQL Server Management Studio 2008 (R2) y versiones posteriores, puede hacer clic derecho en el
Seleccione las tablas que desea DROP.
Seleccione "Guardar en nueva ventana de consulta".
Haga clic en el botón Avanzado.
Establezca Script DROP y CREATE en Script DROP.
Establezca Script Foreign Keys en True.
Haga clic en Aceptar.
Haga clic en Siguiente -> Siguiente -> Finalizar.
Ver el script y luego ejecutar.
fuente
Si primero descarta la tabla "secundaria", también se descartará la clave externa. Si intenta descartar primero la tabla "principal", obtendrá un "No se pudo descartar el objeto 'a' porque está referenciado por una restricción FOREIGN KEY". error.
fuente
Aquí hay otra forma de soltar todas las tablas correctamente, utilizando el
sp_MSdropconstraints
procedimiento. El código más corto que se me ocurrió:fuente
Si se trata de SQL Server, debe eliminar la restricción antes de poder eliminar la tabla.
fuente
Versión un poco más genérica de lo que @mark_s publicó, esto me ayudó
simplemente conecte el nombre de su tabla y ejecute el resultado.
fuente
Aquí hay otra forma de eliminar todas las restricciones seguidas por las tablas mismas, utilizando un truco de concatenación
FOR XML PATH('')
que permite combinar múltiples filas de entrada en una sola fila de salida. Debería funcionar en cualquier cosa SQL 2005 y posterior.He dejado los comandos EJECUTAR comentados por seguridad.
fuente
Aquí hay un script completo para implementar una solución:
fuente
fuente
Con el Administrador de SQL Server, puede eliminar las restricciones de clave externa de la interfaz de usuario. Si desea eliminar la tabla
Diary
pero la tabla Usuario tiene una clave externa queDiaryId
apunta a laDiary
tabla, puede expandir (usando el símbolo más) laUser
tabla y luego expandir laForeign Keys
sección. Haga clic derecho en la clave externa que apunta a la tabla del diario y luego seleccioneDelete
. Luego puede expandir laColumns
sección, hacer clic derecho y eliminar la columnaDiaryId
también. Entonces puedes simplemente ejecutar:Sé que su pregunta real es sobre la eliminación de todas las tablas, por lo que esto puede no ser útil para ese caso. Sin embargo, si solo desea eliminar algunas tablas, creo que esto es útil (el título no menciona explícitamente la eliminación de todas las tablas).
fuente
Si está en un servidor mysql y no le importa perder sus tablas, puede usar una consulta simple para eliminar varias tablas a la vez:
De esta manera, no importa en qué orden use la tabla en su consulta.
Si alguien va a decir algo sobre el hecho de que esta no es una buena solución si tiene una base de datos con muchas tablas: ¡estoy de acuerdo!
fuente
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
no funcionará en el servidor MSSQL. Creo que es una variable específica de MySql.ejecute el siguiente código para obtener el nombre de restricción de clave externa que bloquea su caída. Por ejemplo, tomo la
roles
mesa.Obtendrá el nombre FK algo como a continuación:
FK__Table1__roleId__1X1H55C1
ahora ejecute el siguiente código para eliminar la referencia FK obtenida desde arriba.
¡Hecho!
fuente
Entonces es mucho más fácil descartar toda la base de datos:
fuente
Si desea
DROP
una tabla a la que otra tabla ha hecho referencia utilizando la clave externa, useDROP TABLE *table_name* CASCADE CONSTRAINTS;
Creo que debería funcionar para ti.
fuente
cascade constraints
en el servidor SQL