Estoy tratando de escribir un script que vacie completamente una base de datos de SQL Server. Esto es lo que tengo hasta ahora:
USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
Cuando lo ejecuto en Management Studio, obtengo:
Comando (s) completado con éxito.
pero cuando actualizo la lista de la tabla, todos siguen ahí. ¿Qué estoy haciendo mal?
Respuestas:
Tampoco funciona para mí cuando hay varias tablas de claves externas.
Encontré ese código que funciona y hace todo lo que intenta (elimine todas las tablas de su base de datos):
Puedes encontrar la publicación aquí . Es el post de Groker.
fuente
Could not find stored procedure 'sp_MSForEachTable'.
dbo
. Si tiene esquemas personalizados, debe modificar elsql
para:SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.CONSTRAINT_SCHEMA + '].[' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']'
sp_MSforeachtable
no está disponible en Azure. Utilice la respuesta de @ CountZero en su lugar.También puede eliminar todas las tablas de la base de datos utilizando solo las herramientas de IU de MSSMS (sin utilizar el script SQL). A veces, esta forma puede ser más cómoda (especialmente si se realiza ocasionalmente)
Hago esto paso a paso de la siguiente manera:
fuente
En SSMS:
Ahora, esto eliminará todo, incluida la base de datos. Asegúrese de eliminar el código de los elementos que no desea que se eliminen. Alternativamente, en la sección "Elegir objetos", en lugar de seleccionar la secuencia de datos de la base de datos completa, simplemente seleccione los elementos que desea eliminar.
fuente
delete
se usa para eliminar filas de una tabla. Deberías usardrop table
en su lugar.fuente
NOCHECK CONSTRAINT
incorrecta la sintaxis de mi línea?La respuesta aceptada no es compatible con Azure. Utiliza un procedimiento almacenado no documentado "sp_MSforeachtable". Si obtiene un error "azure no se pudo encontrar el procedimiento almacenado 'sp_msforeachtable" cuando se ejecuta o simplemente desea evitar depender de características no documentadas (que se pueden eliminar o cambiar su funcionalidad en cualquier momento), intente lo siguiente.
Esta versión ignora la tabla del historial de migración del marco de la entidad "__MigrationHistory" y la "database_firewall_rules", que es una tabla de Azure que no tendrá permiso para eliminar.
Ligeramente probado en Azure. Verifique que esto no tenga efectos no deseados en su entorno.
Tomado de:
https://edspencer.me.uk/2013/02/25/drop-all-tables-in-a-sql-server-database-azure-friendly/
http://www.sqlservercentral.com/blogs/sqlservertips/2011/10/11/remove-all-foreign-keys/
fuente
fuente
Tienes casi razón, usa en su lugar:
pero en la segunda línea, es posible que deba ejecutar más de una vez hasta que deje de recibir el error:
Mensaje:
significa que todas las tablas se eliminaron correctamente.
fuente
Corto y dulce:
fuente
sp_msforeachtable
porsp_MSforeachtable
y recomendaría agregar unuse yourdatabase
como primera línea. Trabajado como un encanto.La forma en ayunas es:
fuente
Parece que el comando debe estar sin la manta cuadrada
fuente
Para mí, la forma más fácil:
fuente
¡¡Correcto!!
Puede usar la consulta a continuación para eliminar todas las tablas de la base de datos
EXEC sp_MSforeachtable @ command1 = "¿DROP TABLE?"
¡Feliz codificación!
fuente
¿Qué hay de soltar toda la base de datos y luego volver a crearla? Esto funciona para mi.
fuente
Sé que esta es una publicación antigua ahora, pero he intentado todas las respuestas aquí en una multitud de bases de datos y he descubierto que todas funcionan a veces, pero no todo el tiempo, para varias peculiaridades (solo puedo asumir) de SQL Server.
Finalmente se me ocurrió esto. He probado esto en todas partes (en términos generales) que puedo y funciona (sin ningún procedimiento de almacenamiento oculto).
Para una nota principalmente en SQL Server 2014. (pero la mayoría de las otras versiones que probé también parece funcionar bien).
He intentado con bucles y nulos, etc., etc., cursores y otras formas, pero siempre parecen fallar en algunas bases de datos, pero no en otras, sin ninguna razón obvia.
Obtener un recuento y usarlo para iterar siempre parece funcionar en todo lo que he probado.
fuente
Para las tablas temporales es un poco más complicado debido al hecho de que puede haber algunas claves externas y también una excepción:
Drop table operation failed on table XXX because it is not a supported operation on system-versioned temporal tables
Lo que puedes usar es:
fuente