我正在尝试向表中插入值并收到此错误消息,
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)
答案 0 :(得分:2)
假设RowID
列是一个自动增量列,您只需从插入中省略它,以便让SQL Server自动为其赋值:
insert into table1 (Name, Gender)
values ('John', 'Male')
如果RowID
不是自动增量列并且您需要这样的功能,那么您可能需要做一些工作,q.v。这里:
答案 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)