2017-05-09 1 views
0

Ich habe dieses Problem mit meiner Datenbank, wo es die ID-Spalte weiter erhöht, obwohl es entfernt wurde. Um besser zu verstehen, was ich meinte, hier ist ein Screenshot von meinem gridview:Wie Auto-Inkrement in SQL Server zurücksetzen?

enter image description here

Wie Sie aus der id-Spalte sehen können, alles ist in Ordnung von 11 - 16, aber er übersprungen plötzlich 25-27. Was ich möchte ist, wenn ich einen Gegenstand entferne, möchte ich, dass er mit der letzten ID beginnt, die 16 ist. Also sollte die nächste ID 17 sein. Ich hoffe, das macht Sinn für euch.

Hier ist ein Teil des SQL-Skript auch:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[guitarItems] 
(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [type] [varchar](50) NOT NULL, 
    [brand] [varchar](50) NOT NULL, 
    [model] [varchar](50) NOT NULL, 
    [price] [float] NOT NULL, 
    [itemimage1] [varchar](255) NULL, 
    [itemimage2] [varchar](255) NULL, 
    [description] [text] NOT NULL, 
    [necktype] [varchar](100) NOT NULL, 
    [body] [varchar](100) NOT NULL, 
    [fretboard] [varchar](100) NOT NULL, 
    [fret] [varchar](50) NOT NULL, 
    [bridge] [varchar](100) NOT NULL, 
    [neckpickup] [varchar](100) NOT NULL, 
    [bridgepickup] [varchar](100) NOT NULL, 
    [hardwarecolor] [varchar](50) NOT NULL, 

    PRIMARY KEY CLUSTERED ([id] ASC) 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

SET ANSI_PADDING OFF 
GO 
+4

Identität Spalte kann und wird Lücken haben. –

+0

@ZoharPeled - Gibt es eine Möglichkeit, dies zu ändern? – BrunoEarth

+1

Mögliches Duplikat von [Identitätsinkrement springt in SQL Server-Datenbank] (http://stackoverflow.com/questions/14146148/identity-increment-is-jumping-in-sql-server-database) – GurV

Antwort

1

Primary autoincrement Schlüssel in der Datenbank vorhanden sind verwendet, um eine bestimmte Zeile eindeutig zu identifizieren, und sollte keine Geschäftsbedeutung erhalten. Lassen Sie den Primärschlüssel also unverändert und fügen Sie eine weitere Spalte wie guitarItemsId hinzu. Wenn Sie dann einen Datensatz aus der Datenbank löschen, möchten Sie möglicherweise eine zusätzliche UPDATE-Anweisung senden, um die guitarItemsId-Spalte aller Zeilen zu verringern, die die guitarItemsId größer als die, die Sie gerade löschen. Beachten Sie auch, dass Sie niemals den Wert eines Primärschlüssels in einer relationalen Datenbank ändern sollten, da andere Tabellen als Fremdschlüssel auf ihn verweisen könnten und die Änderung möglicherweise die referenziellen Integritätsbedingungen verletzen würde.

+1

Ich sehe deinen Standpunkt. Es macht Sinn. – BrunoEarth

+0

@BrunoEarth Wenn die Antwort zur Lösung Ihres Problems beigetragen hat, können Sie sie als akzeptierte Antwort markieren. Vielen Dank! – samithagun

0

Sie verwenden können:

DBCC CHECKIDENT ("YourTableNameHere", RESEED, 1); 

Bevor es, besuchen Sie Link: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkident-transact-sql

+0

würde dies nicht auf 1 zurückgesetzt? – berthos

+0

@berthos: Ja. Legen Sie den gewünschten Wert fest. Nur ein Beispiel, mein Freund. – Tomato32

+0

Ja, sicher, ich wollte nur die Tatsache hervorheben, dass es für seine Bedürfnisse implementiert werden muss. – berthos

Verwandte Themen