J'essaie d'écrire un script qui videra complètement une base de données SQL Server. Voici ce que j'ai jusqu'à présent:
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 avec succès.
mais quand je rafraîchis la liste des tableaux, ils sont toujours là. Qu'est-ce que je fais mal?
Réponses:
Cela ne fonctionne pas non plus pour moi quand il y a 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):
Vous pouvez trouver le message ici . C'est le message de Groker.
la source
Could not find stored procedure 'sp_MSForEachTable'.
dbo
. Si vous avez des schémas personnalisés, vous devez modifier lesql
à:SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.CONSTRAINT_SCHEMA + '].[' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']'
sp_MSforeachtable
n'est pas disponible dans Azure. Utilisez plutôt la réponse de @ CountZero.Vous pouvez également supprimer toutes les tables de la base de données en utilisant uniquement les outils d'interface utilisateur MSSMS (sans utiliser de script SQL). Parfois, cette méthode peut être plus confortable (surtout si elle est effectuée occasionnellement)
Je fais cela étape par étape comme suit:
la source
Dans SSMS:
Maintenant, cela supprimera tout, y compris la base de données. Assurez-vous de supprimer le code des éléments que vous ne souhaitez pas supprimer. Sinon, dans la section "Choisir des objets", au lieu de sélectionner pour script toute la base de données, sélectionnez simplement les éléments que vous souhaitez supprimer.
la source
delete
est utilisé pour supprimer des lignes d'une table. Vous devriez utiliser à ladrop table
place.la source
NOCHECK CONSTRAINT
ligne est-elle incorrecte?La réponse acceptée ne prend pas en charge Azure. Il utilise une procédure stockée non documentée "sp_MSforeachtable". Si vous obtenez une erreur "azure n'a pas pu trouver la procédure stockée 'sp_msforeachtable" lors de l'exécution ou si vous voulez simplement éviter de vous fier à des fonctionnalités non documentées (qui peuvent être supprimées ou avoir leurs fonctionnalités modifiées à tout moment), essayez ce qui suit.
Cette version ignore la table d'historique de migration du framework d'entités «__MigrationHistory» et «database_firewall_rules», qui est une table Azure que vous ne serez pas autorisé à supprimer.
Légèrement testé sur Azure. Vérifiez que cela n'a aucun effet indésirable sur votre environnement.
Pris à partir 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/
la source
la source
Vous avez presque raison, utilisez à la place:
mais la deuxième ligne, vous devrez peut-être exécuter plus d'une fois jusqu'à ce que vous cessiez d'obtenir l'erreur:
Message:
signifie que toutes les tables ont été supprimées avec succès.
la source
Court et doux:
la source
sp_msforeachtable
parsp_MSforeachtable
et je recommande vivement d'ajouter unuse yourdatabase
comme première ligne. A travaillé comme un charme.La voie à jeun est:
la source
Il semble que la commande devrait être sans la couverture carrée
la source
Pour moi, le moyen le plus simple:
la source
Spot on !!
Vous pouvez utiliser la requête ci-dessous pour supprimer toutes les tables de la base de données
EXEC sp_MSforeachtable @ command1 = "DROP TABLE?"
Bon codage!
la source
Que diriez-vous de supprimer toute la base de données et de la créer à nouveau? Cela fonctionne pour moi.
la source
Je sais que c'est un ancien message maintenant, mais j'ai essayé toutes les réponses ici sur une multitude de bases de données et j'ai trouvé qu'elles fonctionnent toutes parfois mais pas tout le temps pour diverses bizarreries (je ne peux que supposer) de SQL Server.
Finalement, je suis venu avec ça. J'ai testé cela partout (en général) je peux et cela fonctionne (sans aucune procédure de magasin caché).
À noter principalement sur SQL Server 2014. (mais la plupart des autres versions que j'ai essayées semblent également fonctionner correctement).
J'ai essayé des boucles while et des valeurs nulles, etc., des curseurs et diverses autres formes, mais ils semblent toujours échouer sur certaines bases de données mais pas sur d'autres sans raison évidente.
Obtenir un décompte et l'utiliser pour itérer semble toujours fonctionner sur tout ce que j'ai testé.
la source
Pour les tables temporelles, c'est un peu plus compliqué en raison du fait qu'il peut y avoir des clés étrangères et aussi des exceptions:
Drop table operation failed on table XXX because it is not a supported operation on system-versioned temporal tables
Ce que vous pouvez utiliser est:
la source