2008-08-11 11 views
5

¿Hay una manera simple de colocar un grupo de tablas interrelacionadas en SQL Server? Idealmente, me gustaría evitar tener que preocuparme por el orden en que se enviarán, ya que sé que el grupo completo se habrá ido para el final del proceso.Eliminar un grupo de tablas en SQL Server

Respuesta

2

A riesgo de sonar estúpido, no creo que SQL Server admita la sintaxis de eliminar/cascada. Creo que puede configurar una regla de eliminación para hacer eliminaciones en cascada (http://msdn.microsoft.com/en-us/library/ms152507.aspx), pero por lo que sé, el truco con SQL Server es simplemente ejecutar su consulta de colocación una vez para cada tabla que está descartando, luego verifique que funcionó.

0

no tengo acceso a SQL Server para probar esto, pero ¿qué tal:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE; 
0

No estoy seguro de si el enfoque de Derek trabaja. No lo has marcado como la mejor respuesta hasta el momento.

Si no: con SQL Server 2005 debería ser posible, supongo.
Allí introdujeron excepciones (que aún no he usado). Así que deje caer la mesa, atrape la excepción, si ocurre y pruebe la siguiente tabla hasta que se hayan ido.
Puede almacenar la lista de tablas en una tabla temporal y usar un cursor para recorrerla, si lo desea.

0

Terminé usando Apache's ddlutils para realizar el descarte para mí, que lo resolvió en mi caso, aunque una solución que funcionaba solo en el servidor sql sería bastante más simple.

@Derek Park, no sabía que podía asignar tablas separadas allí, así que es útil, pero no parece funcionar como se esperaba. Nether IF EXISTS ni CASCADE son reconocidos por el servidor SQL, parece, y ejecutar drop table X, Y, Z parece funcionar solo si se deben descartar en el orden establecido.

Consulte también http://msdn.microsoft.com/en-us/library/ms173790.aspx, que describe la sintaxis de la tabla de colocación.

0

Lo que le impide volver a colocar las tablas en cualquier orden son las dependencias de las claves externas entre las tablas. Así que deshazte de los FK antes de comenzar.

  1. Usando las vistas del sistema INFORMATION_SCHEMA, recuperar una lista de todas las claves externas relacionadas con cualquiera de estas tablas
  2. gota cada una de estas claves externas
  3. Ahora usted debería ser capaz de soltar todas las tablas, usando cualquier orden que quieras
1

Un enfoque diferente podría ser: primero deshacerse de las limitaciones, y luego soltar las tablas en una sola toma.

En otras palabras, una RESTRICCIÓN DE CAÍDA para cada restricción, luego una TABLA DE DESCARGAS para cada tabla; en este punto, el orden de ejecución no debería ser un problema.

1

Esto requiere que el sp___drop___constraints la escritura se puede encontrar en Database Journal:

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?" 
GO 
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?" 
GO 

NOTA esto - obviamente - si nos referimos a colocar todas las tablas en la base de datos, así que tenga cuidado

Cuestiones relacionadas