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

问题描述 投票:0回答:3

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

无法将值NULL插入“CustomerId”列,表'dbo.Customers'

对不起,如果我在这里偏离轨道。我已经看过类似的线程来找出我所缺少的东西,但我并没有将它拼凑在一起。我认为它想要将现有的客户ID覆盖为NULL,但我不确定为什么我正在指定dbo.Customer(日期),而不是该记录的现有customerID。

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
sql sql-server sql-insert
3个回答
1
投票

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

我的猜测是你用这样的东西宣称它是一个主键:

customerId int primary key,

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

customerId int identity(1, 1) primary key

然后,当您插入新行时,您不需要为列分配值 - 数据库会为您执行此操作。


0
投票

您的Customer表有一个名为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

0
投票

感谢您的反馈。我想我正在废弃这个并且继续为JOIN创建一个单独的表。不知道为什么我之前没有开始这样做

© www.soinside.com 2019 - 2024. All rights reserved.