Announcement

Collapse
No announcement yet.

Auto_Increment/Identity

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

  • Auto_Increment/Identity

    Hallo liebe gemeinde,

    gibt es eine möglichkeit bei einer Auto_Increment(IDENTITY) Spalte, nach gelöschtem Datensatz, die ID's neu hochzuzählen?

    Also als Beispiel:

    ID
    ---
    1
    2
    3 <- die 3 Row wird als Beispiel jetzt gelöscht
    4
    5

    danach sieht es so aus:

    ID
    ---
    1
    2
    4
    5

    dies möcht ich aber nicht sondern ich will das er mir

    ID
    ---
    1
    2
    3
    4

    wieder neu hochzählt.

    Gibt es da eine möglichkeit?

  • #2
    Hallo,

    Gibt es da eine möglichkeit?
    Ja - aber welchen Sinn hat das? Der Primärschlüssel (PK) einer Tabelle dient nur dazu, einen bestimmten Datensatz in der Menge logisch eindeutig adressieren zu können. Eine fachliche Bedeutung sollte niemals in den PK kodiert werden, so dass der absolute Wert eines PK keine Rolle spielt.

    Über die folgende Stapelanweisung kann eine "Lücke" gefüllt werden, wenn der fehlende Wert bekannt ist:
    [highlight=SQL]
    SET IDENTITY_INSERT IncDemo ON;
    INSERT INTO IncDemo(id,wert,zeit) VALUES (3, 'Wert 0', GetDate())
    SET IDENTITY_INSERT IncDemo OFF;
    [/highlight]

    Das Ermitteln der fehlenende Werte in der Nummernreihe ist auf verschiedenen Wegen möglich. Das folgende Beispiel demonstriert einen davon:
    [highlight=SQL]
    USE tempdb
    GO

    CREATE TABLE Region
    (
    RegionID INT,
    RegionDescription VARCHAR(19)
    )
    GO
    INSERT INTO Region VALUES (10000001, 'Testeintrag');
    INSERT INTO Region VALUES (10000002, 'Testeintrag');
    INSERT INTO Region VALUES (10000003, 'Testeintrag');
    INSERT INTO Region VALUES (10000004, 'Testeintrag');
    INSERT INTO Region VALUES (10000006, 'Testeintrag');
    INSERT INTO Region VALUES (10000007, 'Testeintrag');
    INSERT INTO Region VALUES (10000008, 'Testeintrag');
    INSERT INTO Region VALUES (100000010, 'Testeintrag');
    INSERT INTO Region VALUES (100000011, 'Testeintrag');
    INSERT INTO Region VALUES (100000014, 'Testeintrag');
    GO

    -- Lücken in den fortlaufenden RegionID-Werten ermitteln
    SELECT
    (SELECT MAX(RegionID)
    FROM Region
    WHERE RegionID < f1.RegionID) + 1 AS begin_range, RegionID - 1 AS end_range
    FROM
    Region AS f1
    WHERE
    RegionID <> (SELECT MAX(RegionID)
    FROM Region
    WHERE RegionID < f1.RegionID) + 1
    ORDER BY
    RegionID
    GO
    [/highlight]

    Comment


    • #3
      Ar Danke!! Hat mir sehr weitergeholfen!

      Comment

      Working...
      X