SQL的新知识-为什么我的Insert试图将NULL插入主键?

时间:2019-03-07 15:43:29

标签: sql sql-server sql-insert

我想要做的是将一系列日期插入到customerID = 1的多行中。我有dbo.Customer(Dates)并为其插入,指定我想要将一条记录插入到Customer表的Dates列中,对吗?我收到错误消息:

  

无法将值NULL插入表“ dbo.Customers”的“ CustomerId”列中

对不起,如果我不在这里。我查看了类似的主题以找出我所缺少的内容,但是我没有将它们拼凑在一起。我以为它想将现有的客户ID覆盖为NULL,但是我不确定为什么正是因为我指定了dbo.Customer(Dates)而不是该记录的现有客户ID。

declare @date_Start datetime = '03/01/2011'
declare @date_End datetime = '10/30/2011'
declare @date datetime = @date_Start

while @date <= @date_End
begin
insert into dbo.Customer(Dates) select @date
if DATEPART(dd,@date) = 0
    set @date = DATEADD(dd, -1, DATEADD(mm,1,@date))
else
    set @date = DATEADD(dd,1,@date)
end

select * from dbo.Customer

3 个答案:

答案 0 :(得分:1)

主键为customerId,但您没有插入值。

我的猜测是您将其声明为具有以下内容的主键:

customerId int primary key,

您希望它成为identity列,因此数据库分配一个值:

customerId int identity(1, 1) primary key

然后,当您插入新行时,无需在该列中分配值-数据库会为您完成。

答案 1 :(得分:0)

您的客户表有一个名为CustomerId的列,并且该列不可为空,因此您也必须提供该列的值。如果您的列类型为Int,请尝试以下代码:

declare @date_Start datetime = '03/01/2011'
declare @date_End datetime = '10/30/2011'
declare @date datetime = @date_Start
DECLARE @cusId INT

SET @cusId = 1

while @date <= @date_End
begin
insert into dbo.Customer(CustomerId, Dates) select @cusId, @date
if DATEPART(dd,@date) = 0
    set @date = DATEADD(dd, -1, DATEADD(mm,1,@date))
else
    set @date = DATEADD(dd,1,@date)

    SET @cusId = @cusId + 1;
end

select * from dbo.Customer

答案 2 :(得分:0)

感谢您的反馈。我想我要取消此操作,并要创建一个单独的表来联接。不知道为什么我以前没有开始做