none
SQL-Server auto_increment setzen?

    Frage

  • verwendetes Datenbanksystem: <SQL-Express 2017>

    Hallo Leute,

    ich habe ein großes Problem und zwar hatte ich eine Datenbanksicherung gemacht und habe gestern auf einen anderen Computer Wiederhergestellt und müsste Feststellen das bei einigen Tabellen die Id kein Primärschlüssel hat und die Eigenschaft "auto_increment" ist auch nicht mehr gesetzt. Könnte ich das wieder setzen ohne die Ids zu verändern? Ich habe das mit den AFTER befehl schon mal ausprobiert das Problem da, ist das er die Id neu generiert und das passt natürlich zu meine ganze Verknüpfungen nicht mehr.



    Mfg
    Jürgen
    Dienstag, 4. Dezember 2018 17:02

Alle Antworten

  • Hi Jürgen,
    ich würde folgendes machen:

    1. die Tabelle neu erstellen mit Autowert-Spalte und ohne Datensätze,

    2. IDENTITY_INSERT auf On setzen,

    3. die alten Datensätze incl. Werte der Autowert-Spalte hinzufügen,

    4. den neuen Startwert für den Autowert setzen (DBCC …),

    5. IDENTITY_INSERT wieder auf Off setzen.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 4. Dezember 2018 20:17
  • Hallo Jürgen,

    bei einer Rücksicherung wird eine Datenbank als exakte 1:1 Kopie wieder hergestellt, das dann etwas fehlt/am DB Design verändert ist, kann ich mir beim besten Willen nicht vorstellen. Hast Du auch die richtige Sicherung verwendet? Beliebter Fehler ist, das eine Sicherungsdatei (.bak) 1-n Sicherungen enthalten kann und man versehentlich die 1te = älteste Sicherung verwendet.

    Ein Feld kann man nicht nachträglich auf IDENTITY setzen, die einzige Vorgehensweise ist die von Peter geschilderte. Das einfachste ist, im Tabellen Designer in der Spalte auf IDENTITY zu setzen und dann oben Links in der Symbolleiste sich über den Button "Änderungskript generieren" eben diese tun und das Skript dazu verwenden.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 5. Dezember 2018 06:39
  • Wenn allerdings die Identity zusätzlich als Foreign-Key in anderen Tabellen verwendet wird oder eben auf diese Identiy sonstwie aus anderen Tabellen referenziert wird, verbietet sich allerdings eine Neunummerierung.

    Da sollte man sich doch eher um den Backup/Restore-Vorgang noch mal genauer kümmern.

    Mittwoch, 5. Dezember 2018 12:08
  • Hallo Leute
    Danke erstmal für eure Antworten. 

    Emuu hatte mich richtig verstanden. Warum das so passiert ist weiß ich nicht wir haben ein vollständiges Backup gemacht.


    Problem gelöst.

    Ich könnte das mit Visual Studio lösen können. Da Visual Studio das irgendwie anders als Management Studio macht. Visual Studio hat mir das wieder auf auto_increment gesetz ohne den Index zu verändern.

    Danke nochmal
    Donnerstag, 6. Dezember 2018 19:34
  • Hi Jürgen,
    der im Visual Studio generierte Script macht genau das, was ich am Dienstag, 4. Dezember 2018 20:17 geschrieben habe:

    CREATE TABLE [dbo].[tmp_ms_xx_Tab99] (
        [Id]      INT           IDENTITY (20, 1) NOT NULL,
        [Spalte1] NVARCHAR (50) NULL,
        PRIMARY KEY CLUSTERED ([Id] ASC)
    );
    
    IF EXISTS (SELECT TOP 1 1 
               FROM   [dbo].[Tab99])
        BEGIN
            SET IDENTITY_INSERT [dbo].[tmp_ms_xx_Tab99] ON;
            INSERT INTO [dbo].[tmp_ms_xx_Tab99] ([Id], [Spalte1])
            SELECT   [Id],
                     [Spalte1]
            FROM     [dbo].[Tab99]
            ORDER BY [Id] ASC;
            SET IDENTITY_INSERT [dbo].[tmp_ms_xx_Tab99] OFF;
        END
    
    DROP TABLE [dbo].[Tab99];
    
    EXECUTE sp_rename N'[dbo].[tmp_ms_xx_Tab99]', N'Tab99';


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks


    Donnerstag, 6. Dezember 2018 20:10