2016-09-12 7 views
1

Вот таблица. Мне нужно, чтобы идентификатор увеличивался автоматически.Невозможно вставить значение NULL в идентификационный код

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. 

ответ

3

Если у вас есть IDENTITY, то ему автоматически присваивается значение.

Не включайте его в INSERT заявлении:

INSERT INTO dbo.Atable(CaseNo) 
    VALUES(@CaseNo); 
+0

Если я detele идентификатор в вставки, я получаю: Явное значение должно быть задано для столбца идентификаторов в таблице «ATable» либо когда IDENTITY_INSERT установлен в положение ON или когда пользователь репликации вставляется в столбец идентичности NOT FOR REPLICATION. –

+0

Существует исключение, если 'IDENTITY_INSERT'' ON'. Однако это функция специального назначения, используемая, когда вы хотите скопировать данные в другую таблицу, не затрагивая столбец идентификатора. –

0

IDENTITY столбца автоматически увеличивается на единицу. Вам просто нужно указать начальное значение и при чем семена оно будет увеличиваться при создании таблицы. Это оно.

Поэтому вы не можете вставить значения для столбца IDENTITY, так как SQL server обрабатывает его для вас.

ID int identity(1, 2) - здесь (1 начинает значение и 2 она будет автоинкрементным на 2)

Так это будет выглядеть примерно так.

1 

3 

5 

7 

Для получения дополнительной информации, посмотрите на here

 Смежные вопросы

  • Нет связанных вопросов^_^