Löschen Sie alle Zeilen in einer Tabelle, die die Identitätsspezifikation wieder auf Null zurücksetzt und ohne die Fremdschlüssel zu beeinträchtigen?

Wir haben das database-Framework bereits mit allen Beziehungen und Abhängigkeiten erstellt. Aber in den Tischen waren nur die Dummy-data, und wir müssen diese Dummy-data loswerden und fügen Sie die richtigen hinzu. Wie können wir alles klären und die Primärschlüssel (IsIdentity: ja) zurück auf Null und auch ohne Beeinträchtigung der Fremdtisch-relationalen Struktur verlassen.

Danke vielmals!

Sie können folgende Schritte durchführen:

-- 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" 

Mehr zum Deaktivieren von Constraints und Triggern hier

Wenn einige der Tabellen Identitätsspalten haben, können wir sie wieder aufnehmen

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

Beachten Sie, dass das Verhalten von RESEED zwischen brandneuen Tafeln unterscheidet, und eine, die zuvor ein date von BOL eingefügt hatte:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

Der aktuelle Identitätswert wird auf den newReseedValue gesetzt. Wenn seit der Erstellung keine Zeilen in die Tabelle eingefügt wurden, verwendet die erste Zeile, die nach dem Ausführen von DBCC CHECKIDENT eingefügt wird, newReseedValue als Identität. Andernfalls wird die nächste eingefügte Zeile newReseedValue + 1 verwenden. Wenn der Wert von newReseedValue kleiner als der Maximalwert in der Identitätsspalte ist, wird die Fehlermeldung 2627 bei nachfolgenden Verweisen auf die Tabelle erzeugt.

Reseeding:

DBCC CHECKIDENT (deintable, reseed, 1)

dient zum Einstellen des Primärschlüssels auf 1

aus der Tabelle löschen sollte die data löschen, aber keine anderen Dinge beeinflussen.

Generieren Sie database-Schema-only sql-file mit dem database-Publishing-Assistenten und aktivieren Sie die Option, die Tabellen zu löschen, falls vorhanden. Führen Sie dieses Skript auf Ihrer database und dies wird alles spülen und geben Ihnen frisches Schema, wie Sie benötigen.

Ich würde TRUNCATE verwenden:

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

Natürlich deaktivieren und deaktivieren Sie Check-Constraints auch, wie von kristof vorgeschlagen.