2016-02-05 1044 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語句衝突與外鍵約束‘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

絕對是這個問題,謝謝! –

相關問題