-
De hecho, el método para eliminar datos en la base de datos no es complicado. ¿Por qué debería molestarme? Primero, lo que presento aquí es eliminar todos los datos en la base de datos. Debido a que los datos pueden formar restricciones mutuas, la operación de eliminación puede ocurrir. caer en un bucle infinito. De hecho, el método para eliminar datos en la base de datos no es complicado. ¿Por qué debería molestarme? Primero, lo que presento aquí es eliminar todos los datos en la base de datos, ya que los datos pueden formar restricciones mutuas. puede caer en un bucle infinito. En segundo lugar, aquí se utiliza el procedimiento almacenado no oficial sp_MSForEachTable de Microsoft.
Quizás muchos lectores y amigos hayan experimentado este tipo de cosas: quieren limpiar una base de datos vacía basada en la base de datos de desarrollo, pero debido a la falta de comprensión general de la estructura de la base de datos, al eliminar registros en una tabla, no pueden eliminarlos. porque puede haber restricciones de clave externa. Una estructura de base de datos común es una tabla principal y una subtabla. En este caso, generalmente debe eliminar primero los registros de la subtabla y luego eliminar los registros de la tabla principal.
Cuando se trata de eliminar registros de datos, a menudo me vienen a la mente las declaraciones de eliminación y truncamiento. Sin embargo, si hay restricciones entre dos o más tablas, estas dos declaraciones pueden fallar y lo más terrible es que estos dos comandos solo pueden operar. una mesa a la vez. Entonces, ¿qué debe hacer cuando realmente desea eliminar todos los registros de la base de datos de SQL Server? Hay dos opciones:
1. Eliminar una por una en orden. Cuando hay muchas tablas, este método es muy poco realista. Incluso si no hay muchas tablas pero hay muchas restricciones, todavía hay que dedicar mucho tiempo y energía a estudiar las restricciones. relaciones. Luego, averigüe qué tabla eliminar primero, qué tabla eliminar a continuación y cuál tabla eliminar en último lugar.
2. Deshabilite todas las restricciones, elimine todos los datos y finalmente habilite las restricciones. De esta manera, no tendrá que gastar tiempo ni energía estudiando las restricciones. Solo necesita escribir un procedimiento almacenado simple para completar esta tarea automáticamente.
De estas dos opciones, no es difícil ver que la segunda opción es la más simple y efectiva. Entonces, al usar la segunda opción, ¿cómo implementarla?
Primero, debe escribir código para recorrer todas las tablas. Aquí recomiendo un procedimiento almacenado sp_MSForEachTable, porque no hay una descripción de este procedimiento almacenado en la documentación oficial de Microsoft y es posible que muchos desarrolladores no hayan oído hablar de él, por lo que puede buscarlo. En Internet, la mayoría de las soluciones son muy complicadas. Algunas personas pueden pensar que, dado que no existe un documento oficial, este proceso de almacenamiento puede ser inestable y lo rechazarán psicológicamente, pero no es así. Echemos un vistazo a un guión completo:
CREAR PROCEDIMIENTO sp_DeleteAllData
COMO
EXEC sp_MSForEachTable '¿ALTERAR TABLA? NOCHECK RESTRICCIÓN TODAS'
EXEC sp_MSForEachTable '¿ALTERAR TABLA? DESACTIVAR DISPARADOR TODO'
EXEC sp_MSForEachTable '¿ELIMINAR DE?'
EXEC sp_MSForEachTable '¿ALTERAR TABLA? VERIFICAR RESTRICCIÓN TODAS'
EXEC sp_MSForEachTable '¿ALTERAR TABLA? HABILITAR DISPARADOR TODO'
EXEC sp_MSFOREACHTABLE 'SELECCIONAR * DESDE?'
IR
Este script crea un procedimiento almacenado llamado sp_DeleteAllData. Las dos primeras declaraciones deshabilitan las restricciones y los desencadenantes respectivamente. La tercera declaración en realidad elimina todos los datos. Las siguientes declaraciones restauran las restricciones y los desencadenantes, respectivamente. La última declaración muestra los registros en cada tabla. esta declaración se puede omitir. Solo quiero confirmar si se han borrado todas las tablas.
Puede ejecutar este procedimiento almacenado en cualquier base de datos, por supuesto, no en la base de datos generada, pero no me culpe por no decírselo. De todos modos, primero haga una copia de seguridad de la base de datos, use la base de datos de respaldo para restaurar y luego ejecute el procedimiento almacenado. Jaja, incluso si es una base de datos grande, su base de datos no tardará en convertirse en una base de datos vacía, ¡lo cual da un poco de miedo!