Ошибка SQL Server: сообщение 515, уровень 16, состояние 2 - вставка значения в столбец идентификатора?(Поле NOT NULL отключено) - PullRequest
0 голосов
/ 13 октября 2018

Я создал несколько таблиц, это одна из них:

CREATE TABLE JewelryOrders
(
    OrderID INT, 
    JewelID INT,
    Quantity INT NOT NULL,
    PRIMARY KEY (OrderID, JewelID),
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
    FOREIGN KEY (JewelID) REFERENCES Jewels(JewelID)
)

, а затем я попытался вставить некоторые данные:

INSERT INTO JewelryOrders(Quantity)
VALUES ('1'), ('2');

Однако я получил сообщение об ошибке:

Сообщение 515, уровень 16, состояние 2, строка 101
Невозможно вставить значение NULL в столбец «OrderID», таблица «JewelryStore.dbo.JewelryOrders»;столбец не допускает пустых значений.INSERT завершается неудачей.

OrderID определяется таким образом в своей исходной таблице:

CREATE TABLE Orders
(
    OrderID INT IDENTITY PRIMARY KEY,
    CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID),
    OrderDate DATE NOT NULL,
    SumTotal INT NOT NULL,
)

Таким образом, это не столбец NOT NULL.Есть предложения?

1 Ответ

0 голосов
/ 13 октября 2018

Это потому, что столбец первичного ключа не допускает пустые значения.

В вашем коде

CREATE TABLE JewelryOrders
(
    OrderID INT, 
    JewelID INT,
    Quantity INT NOT NULL,
    PRIMARY KEY(OrderID, JewelID),
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
    FOREIGN KEY (JewelID) REFERENCES Jewels(JewelID)
)

OrderID и JewelID составляют первичный ключ (составной), который делаетэти два столбца не допускают пустых значений, в то время как в операторе вставки:

INSERT INTO JewelryOrders(Quantity)
VALUES ('1'), ('2');

вы просто указываете столбец Quantity, и именно поэтому вы получаете эту ошибку.

Вывод: в столбце нетВаша JewelryOrders таблица разрешает Nulls.

Создать первичные ключи

  • Таблица может содержатьтолько одно ограничение PRIMARY KEY.

  • Все столбцы, определенные в ограничении PRIMARY KEY, должны быть определены как NOT NULL.Если обнуляемость не указана, все столбцы, участвующие в ограничении PRIMARY KEY, имеют значение обнуляемости NOT NULL.

...