2009-12-23 2 views
2

Nous avons déjà créé le framework de base de données, avec toutes les relations et dépendances. Mais à l'intérieur des tables étaient juste les données fictives, et nous devons nous débarrasser de ces données factices, et commencer à ajouter les bonnes. Comment pouvons-nous effacer tout et laisser les clés primaires (IsIdentity: yes) à zéro, et aussi sans affecter la structure relationnelle de table-étrangère.Effacer toutes les lignes d'une table en réinitialisant la spécification d'identité à zéro et sans affecter les clés étrangères?

Merci beaucoup!

Répondre

8

Vous pouvez prendre les mesures suivantes:

-- disable all foreign key constraints 
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

-- delete data in all tables 
EXEC sp_MSForEachTable "DELETE FROM ?" 

-- enable all constraints 
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" 

En savoir plus sur si certaines des tables ont des colonnes d'identité invalidantes des contraintes et des déclencheurs here

on peut vouloir les réensemencer

EXEC sp_MSforeachtable "DBCC CHECKIDENT ('?', RESEED, 0)" 

Notez que le comportement de RESEED diffère entre une nouvelle table et une autre qui avait déjà été insérée précédemment à partir de BOL:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

La valeur d'identité en cours est réglé sur la newReseedValue. Si aucune ligne n'a été insérée dans la table depuis que a été créée, la première ligne insérée après l'exécution de DBCC CHECKIDENT utilisera newReseedValue comme identité. Sinon, la ligne suivante insérée sera utilisation newReseedValue + 1. Si la valeur de newReseedValue est inférieure à la valeur maximale dans la colonne d'identité, message d'erreur 2627 sera générée sur les références suivantes à la table.

+0

fonctionne parfaitement comme j'avais besoin. Merci – Jronny

1

réensemencement:

DBCC CHECKIDENT (yourtable, réensemencer, 1)

est pour définir la clé primaire sur 1

supprimer de la table devrait supprimer les données, mais aucune incidence sur les autres.

+0

* L'instruction DELETE était en conflit avec la contrainte REFERENCE "FK_BlahAbcs_AnotherBlah". * Comment pouvons-nous éviter cela? – Jronny

+0

désactiver temporairement la contrainte comme Christof l'a fait. – pipelinecache

1

Générer le fichier SQL de schéma de base de données uniquement à l'aide de Database publishing wizard et d'activer l'option pour supprimer les tables si elles existent. Exécutez ce script sur votre base de données et cela va tout vider et vous donner un nouveau schéma selon vos besoins.

+0

Sons prometteurs ... Mais comment ou où pouvons-nous trouver l'assistant de publication? =) – Jronny

+0

Ici - http://www.microsoft.com/downloads/details.aspx?FamilyId = 56E5B1C5-BF17-42E0-A410-371A838E570A & displaylang = fr –

+0

Explorez des moyens non conventionnels pour des résultats plus prometteurs! –

1

J'utilise TRUNCATE:

-- Truncate table (very fast, and it resets Identity as well) 
EXEC sp_MSForEachTable "TRUNCATE TABLE ?" 

Bien sûr, désactiver et réactiver les contraintes de vérification aussi, comme suggéré par kristof.

+0

Truncate réinitialise-t-il également l'identité? – Zapnologica

+1

Comme j'ai écrit dans la réponse originale, oui (la commande 'DELETE', à la place, ne le fait pas). – Diego

Questions connexes