267 votes

Comment supprimer toutes les tables d'une base de données SQL Server ?

J'essaie d'écrire un script qui videra complètement une base de données SQL Server. Voilà ce que j'ai pour l'instant :

 USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'

Lorsque je l'exécute dans Management Studio, j'obtiens :

Commande(s) terminée(s) avec succès.

mais quand je rafraîchis la liste des tables, ils sont toujours là. Qu'est-ce que je fais mal?

384voto

Gabriel GM Points 1414

Cela ne fonctionne pas non plus pour moi lorsqu'il existe plusieurs tables de clés étrangères. J'ai trouvé ce code qui fonctionne et fait tout ce que vous essayez (supprimez toutes les tables de votre base de données):

 DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR

SET @Cursor = CURSOR FAST_FORWARD FOR
SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.TABLE_SCHEMA + '].[' +  tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + '];'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME =rc1.CONSTRAINT_NAME

OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql

WHILE (@@FETCH_STATUS = 0)
BEGIN
Exec sp_executesql @Sql
FETCH NEXT FROM @Cursor INTO @Sql
END

CLOSE @Cursor DEALLOCATE @Cursor
GO

EXEC sp_MSforeachtable 'DROP TABLE ?'
GO

Vous pouvez trouver le poste ici . C'est le message de Groker.

50voto

DaveShaw Points 19555

delete est utilisé pour supprimer des lignes d'une table. Vous devriez plutôt drop table

 EXEC sp_msforeachtable 'drop table [?]'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X