2016-02-05 3 views
0

Я довольно новичок в SQL и в настоящее время работает с MS SQL Server Management Studio. Мне дано задание, где я должен создать базу данных с определенными таблицами. Две из этих таблиц называются «Продукты» и «Категории». После создания всех таблиц мне пришлось заполнять их (вставлять в них записи), и именно здесь я застрял.SQL: инструкция INSERT противоречит ограничению FOREIGN KEY

Это код для создания двух таблиц:

Категории стол:

CREATE TABLE Categories (
    CategoryID NCHAR(3) PRIMARY KEY, 
    Name NVARCHAR(50) NOT NULL); 

Продукция стол:

CREATE TABLE Products (
    ProductID INT identity(1,1) PRIMARY KEY, 
    Name NVARCHAR(50) NOT NULL, 
    [Single Price] MONEY NOT NULL, 
    CategoryID NCHAR(3) NOT NULL, 
    FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)); 

Здесь я вставляя данные в таблицу Категории:

INSERT INTO Categories (CategoryID, Name) 
VALUES ('BKS', 'Books'), 
     ('MSC','Music'), 
     ('HDW', 'Hardware'), 
     ('SFW', 'Software'); 

Пока все хорошо. И вот тут возникает проблема! Я пытаюсь вставить данные в таблицу Products, как это:

INSERT INTO Products (Name, [Single Price], CategoryID) 
VALUES ('SQL for Dummies', 39.99, 'BKS'), 
     ('The Power of Now', 24.99, 'BKS'), 
     ('Steve Jobs: The Book', 29.99, 'BKS'), 
     ('Eminem albums', 19.99, 'MSC'), 
     ('Jay Z albums', 23.99, 'MSC'), 
     ('Notorious B.I.G. albums', 24.99, 'MSC'), 
     ('GeForce GT 710 2GB graphics card', 49.99, 'HDW'), 
     ('2 TB T3 SSD', 79.99, 'HDW'), 
     ('Acer Curved Gaming monitor', 259.99, 'HDW'), 
     ('MS SQL Server Management Studio', 59.99, 'STW'), 
     ('Visual Studio 2015', 69.99, 'SFW'), 
     ('GTA V', 79.99, 'SFW'); 

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

"Инструкции INSERT заявление конфликтной с ограничением FOREIGN KEY„FK__Products__Catego__99BF96C4“Конфликт. произошли в базе данных «HackCompany», таблице «dbo.Categories», в столбце «CategoryID».

Заявление было прервано ».

Если у кого-то есть помощь, все будет оценено!

+3

Один или несколько категорий не в таблице категорий. Для ваших образцов данных это будет «STW». –

+0

О, черт! Спасибо кучу, я не могу поверить, что не видел этого! Определенно исправлена ​​проблема :) –

ответ

1

Проблема в том, что в данных нет одной или нескольких категорий. Вы можете найти это с select заявлением:

SELECT v.* 
FROM (VALUES ('SQL for Dummies', 39.99, 'BKS'), 
      ('The Power of Now', 24.99, 'BKS'), 
      ('Steve Jobs: The Book', 29.99, 'BKS'), 
      ('Eminem albums', 19.99, 'MSC'), 
      ('Jay Z albums', 23.99, 'MSC'), 
      ('Notorious B.I.G. albums', 24.99, 'MSC'), 
      ('GeForce GT 710 2GB graphics card', 49.99, 'HDW'), 
      ('2 TB T3 SSD', 79.99, 'HDW'), 
      ('Acer Curved Gaming monitor', 259.99, 'HDW'), 
      ('MS SQL Server Management Studio', 59.99, 'STW'), 
      ('Visual Studio 2015', 69.99, 'SFW'), 
      ('GTA V', 79.99, 'SFW') 
    ) as v(Name, [Single Price], CategoryID) 
WHERE NOT EXISTS (select 1 from categories c where v.categoryID = c.categoryID) 
+0

Ничего себе, это очень аккуратный способ найти проблематичную запись. Спасибо! –

0

Категория «STW» не существует в таблице

+0

Определенно была проблема, спасибо! –

Смежные вопросы