插入时不指定RowID

时间:2017-07-26 08:42:45

标签: sql-server

我正在尝试向表中插入值并收到此错误消息,

Cannot insert a value NULL into column "RowID". 

我是否必须在表格中找到最后RowID值并在每次插入时手动输入,如下面的插入?

insert into table1 (RowID, Name, Gender) values (801, John, Male)

有没有办法插入如下:

insert into table1 (RowID, Name, Gender) values (AutoInputRowID, John, Male)

4 个答案:

答案 0 :(得分:2)

假设RowID列是一个自动增量列,您只需从插入中省略它,以便让SQL Server自动为其赋值:

insert into table1 (Name, Gender)
values ('John', 'Male')

如果RowID不是自动增量列并且您需要这样的功能,那么您可能需要做一些工作,q.v。这里:

SQL Server add auto increment primary key to existing table

答案 1 :(得分:1)

只是我的两分钱:

您实际上可以将现有列转换为标识。只要更改的列是唯一编号,它将自动从最大数字+ 1开始递增。您也可以选择重新设置值,如果您的最大值是例如100.你可以选择从200开始播种,这样你的下一个插入就会给你201.

这可以在SQL Server Management Studio中完成。在设计模式下编辑有问题的表格。选择要修改的列。有一个名为“Identity Specification”的属性,展开它并更改值“Is Identity”=“Yes”并保存表格。如果要重新设定(从特定数字开始),请在“身份种子”属性中设置此值。

有关详情,请参阅Adding an identity to an existing column下的部分答案。

答案 2 :(得分:0)

在插入时导出它,如下所示:

INSERT INTO table1 (RowID, Name, Gender)
SELECT MAX(RowID) + 1, 'John', 'Male'
FROM table1

如果您没有,不想要和/或不能使用identity,则非常有用。只考虑性能影响(,如果有的话)。

如果一次插入多条记录,您可能希望使用MAX从上方移动public的结果。

答案 3 :(得分:0)

你有两个选择: 1-将RowID列设置为Identity(但只有在表为空时才能执行此操作) 2-创建一个函数,为表中的RowID提供最大值:

 SET ANSI_NULLS ON
 GO
 SET QUOTED_IDENTIFIER ON
 GO
 CREATE FUNCTION dbo.getMaxValue ()
 RETURNS int
 AS
 BEGIN

 DECLARE @valRet int
 SELECT @valRet=MAX(RowID) + 1
 FROM table1 ; 

 RETURN @valRet

 END
 GO

在插入命令中调用该函数后:

insert into table1 (RowID, Name, Gender) values (dbo.getMaxValue(), John, Male)