BebeSaiyan Ответов: 1

Как сбросить автоинкремент в MSSQL?


У меня была эта проблема с моей базой данных, где она продолжала увеличивать столбец идентификатора, даже если он был удален. Допустим, у меня есть столбец id от 1 до 16. Теперь я хочу добавить элемент, его идентификатор будет равен 17. Но когда я удалю пункт 17 и решу добавить его снова, он перейдет к 18. Так что теперь моя колонка id будет похожа на 1-16& 18. Он создает этот огромный пробел в моем столбце id из-за его продолжающегося автоматического увеличения столбца id. Я хочу, чтобы, когда я удаляю элемент, он начинался с последнего идентификатора, который равен 16. Таким образом, следующий идентификатор должен быть 17. Я надеюсь, что это имеет смысл для вас, ребята.

Что я уже пробовал:

Вот часть сценария sqp:

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
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[guitarItems] ON

1 Ответов

Рейтинг:
2

pt1401

Ты можешь это сделать, но будь осторожен.
Столбец идентификаторов не гарантирует уникальности.

Предположим, у вас есть 15 записей с идентификаторами 1-15, а затем вы удаляете строки 5-10
Вы можете сбросить семя с помощью

DBCC CHECKIDENT('<tablename>', RESEED, <startvalue>, <increment>)

таким образом, вы пересаживаетесь на 5 с шагом 1
DBCC CHECKIDENT('guitarItems', RESEED, 5, 1)

Затем вы начинаете создавать новые записи, которые будут начинаться с 5.
Когда вы доберетесь до 10, Ваша вставка потерпит неудачу. Он не перескочит на 16.

В общем, повторное заполнение, чтобы избежать пробелов в идентификаторах, является как ненужным, так и опасным.