无法在标识ID中插入值NULL

时间:2016-09-12 11:52:25

标签: php sql tsql insert identity

这是表格。我需要id自动增加。

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.

2 个答案:

答案 0 :(得分:3)

如果您有IDENTITY列,则会自动为其分配值。

请勿将其包含在INSERT声明中:

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

答案 1 :(得分:0)

IDENTITY列会自动递增。您只需要指定起始值,在种子时,它将在创建表时增加。就是这样。

因此,您无法为IDENTITY列插入值,因为SQL server会为您处理。

ID int identity(1, 2) - 这里(1是起始值,2是自动递增2)

所以它看起来像。

1

3

5

7

有关详细信息,请查看here