Новое в SQL - Почему моя вставка в пытается вставить NULL в первичный ключ? - PullRequest
0 голосов
/ 07 марта 2019

Что я хочу сделать, это вставить диапазон дат в несколько строк для customerID = 1. У меня есть и вставьте для dbo.Customer (Dates), указав, что я хочу вставить запись в столбец Dates для моей таблицы Customer, верно? Я получаю ошибку:

Невозможно вставить значение NULL в столбец 'CustomerId', таблица 'dbo.Customers'

Извините, если я не в порядке. Я посмотрел на похожие темы, чтобы выяснить, чего мне не хватает, но я не собираю это вместе. Я думаю, что он хочет перезаписать существующий идентификатор клиента как NULL, но я не уверен, почему именно, так как я указываю dbo.Customer (Dates), а не существующий 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

Ответы [ 3 ]

1 голос
/ 07 марта 2019

Первичный ключ - customerId, но вы не вводите значение.

Я предполагаю, что вы объявили его как первичный ключ с чем-то вроде этого:

customerId int primary key,

Вы хотите, чтобы это был столбец identity, поэтому базе данных присваивается значение:

customerId int identity(1, 1) primary key

Тогда вам не нужно присваивать значение в столбце при вставке новой строки - база данных сделает это за вас.

0 голосов
/ 07 марта 2019

спасибо за отзыв. Я думаю, что откажусь от этого и собираюсь создать отдельную таблицу для JOIN. Не уверен, почему я не начал делать это раньше

0 голосов
/ 07 марта 2019

В вашей таблице Customer есть столбец с именем CustomerId, и этот столбец НЕ может иметь значение Nullable, поэтому вы также должны указать значение этого столбца. Если ваш тип столбца 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
...