Thomas Bandt

Über mich | Kontakt | Archiv

[SQL] Identity Spalten zurücksetzen

Wenn man "normale" Identities und keine Guids als IDs benutzt, erhält man, wenn die Anwendung fertig für die Auslieferung ist, schnell recht hohe IDs - da die ja fortlaufend, meist bei 1 beginnend, bereits während der Erstellung durch das Anlegen von X Testdatensätzen nach oben getrieben wurden. In Access ist die Sache einfach - einfach Datenbank komprimieren und reparieren, und schon sind Autowerte dort wieder bei 0.

Am SQL Server muss man eine System-Sproc benutzen:

delete from Tabelle
DBCC CHECKIDENT('Tabelle', RESEED, 0)
select @@identity From Tabelle

Funktioniert am SQL Server 2000 wie am SQL Server 2005, und sollte das folglich auch mit Express tun.

Kommentare

  1. Sven schrieb am Montag, 13. März 2006 18:58:00 Uhr:

    Wenn doch aber die Tabelle leer ist, da sonst ja ein Reseed bei 0 nicht sinnvoll wäre, ist ein truncate genau so effektiv.

    Denn wenn du ein reseed machst, muss die Tabelle doch leer sein, und ein truncate macht sowohl das Leeren, als auch den reseed...
  2. Thomas schrieb am Dienstag, 14. März 2006 11:08:00 Uhr:

    Danke für den Hinweis :-) Ob ich nun ein Delete vorweg schicke oder das Ganze mit nur einer Zeile mache, ist für mich, der dass nur macht weil er es machen muss, doch eher nebensächlich.

    Aber ich werds mir merken :)
  3. Marco Scheel schrieb am Sonntag, 19. März 2006 19:23:00 Uhr:

    Hi Thomas,

    hier der auszug aus den SQL Books Online:
    "The TRUNCATE TABLE statement is a fast, nonlogged method of deleting all rows in a table. TRUNCATE TABLE is functionally the same to the DELETE statement without a WHERE clause. However, TRUNCATE TABLE is faster and uses fewer system and transaction log resources."

    Rentiert sich also eventuell doch, besonders bei vielen Rows. Solltest du allerdings Referenzen auf deinen Tables haben, kommst du um dein Delete allerdings doch nicht rum.

    Ciao Marco

    Ciao Marco


« Zurück  |  Weiter »