Announcement

Collapse
No announcement yet.

Identität setzt sich zurück

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Identität setzt sich zurück

    Serwus miteinander,

    dies ist mein erster Beitrag in diesem Forum. Ich hoffe ihr könnt mir bei meinem Sql Server Problem helfen.
    Also ich habe hier eine Datenbank unter SQL Server 2005. In dieser sind zwei Tabellen beinhaltet: ORDER und ORDER_ARCHIVE.

    Die Tabelle ORDER hat als Primärschlüssel eine Identität, welche sich automatisch bei jedem Datensatz um 1 erhöht (1, 1).

    Die Tabelle ORDER_ARCHIVE hat ebenfalls einen solchen Primärschlüssel. In einer weiteren Spalte wird allerdings die ID gespeichert, die der Datensatz hatte, als er noch in der ORDER Tabelle war.

    Man sollte vielleicht dazu sagen, dass die Daten nach einiger Zeit von der ORDER Tabelle in die ORDER_ARCHIV Tabelle verschoben werden.

    Jetzt ist mir aufgefallen, die automatische Nummerierung des Schlüssels in ORDER von vorne beginnt, wenn ich in diese eine neue Spalte einfüge. Dies passiert aber nur, wenn die Tabelle leer ist und ich die Spalte nicht am Ende der Tabelle anhänge, sondern zwischen zwei bereits bestehenden Spalten. Dies ist dann natürlich in sofern schlecht, als dass ich in der Tabelle ORDER_ARCHIVE in der entsprechenden Spalte, keine eindeutigen Werte mehr besitze.

    Kann mir jemand von euch sagen, wie ich dem SQL-Server "verbieten" kann die Identität nach der Spalteneinfügen wieder neu mit 1 zu nummerieren?

    Vielen Dank im Voraus
    Grüße Schlonzo

  • #2
    Hallo Schlonzo,

    die Spalte nicht am Ende der Tabelle anhänge, sondern zwischen zwei bereits bestehenden Spalten
    Da ist schon der Kasus Knacksus.

    Wenn Du das Einfügen einer Spalte "mitterdrin" machst, lass Dir mal das Änderungs-Sript anzeigen.
    Da ist kein ALTER TABLE drin, sondern es wird eine Temp-Tabelle angelegt, die Daten umkopiert, die alte geDROPped, neu angelegt und die Daten aus der Temp-Tabelle wieder zurückkopiert.
    Dabei bleibt der alte IDENTITY Wert natürlich auf der Strecke.

    Nicht nur deswegen macht man so was wie "mitterdrin einfügen" auch nicht, auch sonst ist es zu so ziemlich rein gar nichts gut. Versuch das mal mit einer richtig grossen Tabelle (x Mio DS); viel Spass dabei.
    Die Reihenfolge ist (sollte) immer völlig egal sein; sonst ist es nur schlechtes Design+Programmierung.

    "Verbieten" kannst Du es nicht wirklich richtig, nur indem Du das Änderungsscript nimmst und beim CREATE der neue Tablle das IDENTITY mit dem letzten Wert vorbesetzt, z.B. IDENTITY(6789, 1), wenn die letze ID 6788 war.
    Zuletzt editiert von O. Helper; 22.10.2008, 21:48.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo Schlonzo,

      du könntest GUIDs als ID (Primärschlüssel) verwenden -> somit brauchst du dich über die Reihenfolge nicht kümmern.

      GUIDS im SQL Server sind vom Datentyp: uniqueidentifier

      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Super vielen Dank für eure Antworten,
        jetzt versteh ich auch, warum ich beim ALTER TABLE nie eine Option gefunden hab, an welcher Stelle man die neue Spalte einfügen möchte ;-). Das Einordnen der Spalte hatte einen reinen Schönheitscharakter, aber das wird ab jetzt nicht mehr beürcksichtig . Also danke euch nochmal.

        Comment

        Working...
        X