Вот таблица. Мне нужно, чтобы идентификатор увеличивался автоматически.
CREATE TABLE [dbo].[Atable](
[id] INT NOT NULL IDENTITY(1, 1),
[CaseNo] [int] NULL,
CONSTRAINT [AtablePK] 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]
GO
SET IDENTITY_INSERT dbo.Atable ON
И вот процедура вставки:
CREATE PROCEDURE dbo.INSERT_Atable
@id INT = NULL OUTPUT
,@CaseNo INT = NULL
AS
SET NOCOUNT OFF;
SELECT @id = @@IDENTITY
INSERT INTO dbo.Atable(id,CaseNo) VALUES(@id ,@CaseNo)
А вот и вызов к процедуре:
SET IDENTITY_INSERT dbo.INSERT_Atable ON
EXEC dbo.Atable @CaseNo = '2'
Почему я получаю эту ошибку ?:
Cannot insert the value NULL into column 'id', table 'dbo.Atable'; column does not allow nulls. INSERT fails.
Если у вас есть IDENTITY
столбец, то ему автоматически присваивается значение.
Не включайте его в INSERT
заявление:
INSERT INTO dbo.Atable(CaseNo)
VALUES(@CaseNo);
IDENTITY
столбец автоматически увеличивается. Вам просто нужно указать начальное значение и при чем семя он будет увеличиваться при создании таблицы. Вот и все.
Таким образом, вы не можете вставить значения для IDENTITY
столбец, как SQL server
обрабатывает это для вас.
ID int identity(1, 2)
— здесь (1 — начальное значение, 2 — автоматическое увеличение на 2)
Так это будет выглядеть примерно так.
1
3
5
7
Для получения дополнительной информации, посмотрите на Вот