2017-04-14 54 views
0

SQL71516 ::被引用表'[dbo]。[MSTransaction]'不包含與外鍵中的引用列表匹配的主鍵或候選鍵。如果被引用的列是一個計算列,它應該被保留。不包含與引用匹配的主鍵或候選鍵

這是我收到的錯誤。任何解決方案下面是兩個表的SQL代碼:

CREATE TABLE [dbo].[MSOrderline] 
(
    [PurchaseID] NCHAR (200) NOT NULL, 
    [ProductID] NCHAR (200) NOT NULL, 
    [Quantity] INT   NULL, 

    CONSTRAINT [DoubleMS_PK] 
     PRIMARY KEY CLUSTERED ([PurchaseID] ASC, [ProductID] ASC), 
    FOREIGN KEY ([PurchaseID]) REFERENCES [dbo].[MSTransaction] ([PurchaseID]), 
    FOREIGN KEY ([ProductID]) REFERENCES [dbo].[MSProducts] ([ProductID]) 
); 

CREATE TABLE [dbo].[MSTransaction] 
(
    [TransactionID] NCHAR (200) NOT NULL, 
    [EmployeeID] NCHAR (200) NULL, 
    [CustomerID] NCHAR (200) NULL, 
    [PurchaseID] NCHAR (200) NOT NULL, 
    [Amount]  INT   NULL, 
    [TotalAmount] INT   NULL, 
    [TimeOfSale] NCHAR (200) NULL, 
    [DiscountID] NCHAR (200) NULL, 

    PRIMARY KEY CLUSTERED ([TransactionID] ASC), 

    FOREIGN KEY ([DiscountID]) REFERENCES [dbo].[MSDiscount] ([DiscountID]), 
    FOREIGN KEY ([EmployeeID]) REFERENCES [dbo].[MSEmployee] ([EmployeeID]), 
    FOREIGN KEY ([CustomerID]) REFERENCES [dbo].[MSCustomer] ([CustomerID]) 
); 

我知道這已經被問過,但既沒有在我的情況下工作或我不能就工作到了我的情況。

+3

長字符字段是主鍵這樣一個壞主意。 –

回答

0

正如Gordon Linoff所說,這些NCHAR(200)是集羣密鑰的可怕選擇。

您必須先創建要引用的表。要使用PurchaseId作爲關鍵字,它必須是unique

在SQL Server實例:

CREATE TABLE [dbo].[MSTransaction] (
    [TransactionID] NCHAR (200) NOT NULL, 
    [EmployeeID] NCHAR (200) NULL, 
    [CustomerID] NCHAR (200) NULL, 
    [PurchaseID] NCHAR (200) NOT NULL unique, 
    [Amount]  INT   NULL, 
    [TotalAmount] INT   NULL, 
    [TimeOfSale] NCHAR (200) NULL, 
    [DiscountID] NCHAR (200) NULL, 
    PRIMARY KEY CLUSTERED ([TransactionID] ASC) 
    --,FOREIGN KEY ([DiscountID]) REFERENCES [dbo].[MSDiscount] ([DiscountID]), 
    --FOREIGN KEY ([EmployeeID]) REFERENCES [dbo].[MSEmployee] ([EmployeeID]), 
    --FOREIGN KEY ([CustomerID]) REFERENCES [dbo].[MSCustomer] ([CustomerID]) 
); 
CREATE TABLE [dbo].[MSOrderline] (
    [PurchaseID] NCHAR (200) NOT NULL, 
    [ProductID] NCHAR (200) NOT NULL, 
    [Quantity] INT   NULL, 
    CONSTRAINT [DoubleMS_PK] PRIMARY KEY CLUSTERED ([PurchaseID] ASC, [ProductID] ASC), 
    FOREIGN KEY ([PurchaseID]) REFERENCES [dbo].[MSTransaction] ([PurchaseId]), 
    --FOREIGN KEY ([ProductID]) REFERENCES [dbo].[MSProducts] ([ProductID]) 
); 

rextester演示:http://rextester.com/ZVZD33282

參考有關聚集鍵進行更好的選擇:

相關問題