2017-03-03 78 views
0

我創建了2個表,table123items_ordered如何將主鍵和外鍵添加到Microsoft SQL Server數據庫中的現有表

  • table123具有5列:customeridfirstnamesurnamecitystate

  • items_ordered具有5列customeridorder_dateitemquantityprice

我想創建table123customerid列和items_orderedcustomerid列外鍵的主鍵。

這裏是我曾經嘗試創建一個主&外鍵代碼:

ALTER TABLE table123 
    ADD PRIMARY KEY (customerid); 

ALTER TABLE items_ordered 
    ADD FOREIGN KEY (customerid) 
     REFERENCES table123 (customerid); 

然而,當我執行這些命令,它說

不能定義在空的主鍵約束表'123'中的列

我該如何解決這個問題?表中也沒有任何空值。

P.S.我一直在使用這種替代方法創建一個主鍵和外鍵的嘗試:

SELECT table123.customerid, table123.surname, 
     items_ordered.order_date, items_ordered.item, items_ordered.price 
FROM table123, items_ordered 
WHERE table123.customerid = items_ordered.customerid; 

上面的代碼給了我一張表,客戶ID鏈接到客戶名稱和產品購買。但是,這是創建主鍵&的正確方法嗎?

+1

好,錯誤說明了這一切 - 你**不能**在可空列上創建一個主鍵 - 所以確保在你的定義中爲'table123',你有' CustomerId INT NOT NULL' - **然後**您可以定義一個主鍵。而你的第二次嘗試是有缺陷的,因爲它應該使用**正確的ANSI/ISO JOIN語法**(而不是在'FROM'子句中以逗號分隔的方式列出表),並且它不會**創建​​主要和/或外鍵 - 它只是加入一個共同的列上的兩個表 –

+0

好吧,它會是一個內部加入?此外,當您創建主鍵和外鍵時,它是否不會創建單獨的表? – CrashBandicoot

回答

2

你可以試試嗎?

ALTER TABLE table123 
ALTER COLUMN customerid INT NOT NULL 

然後運行:

ALTER TABLE table123 
ADD PRIMARY KEY (customerid) 

然後,

ALTER TABLE items_ordered 
ADD FOREIGN KEY (customerid) 
REFERENCES table123 (customerid) 

您需要更改列定義爲NOT NULL,並確保所有值都是唯一的,以及

+0

感謝您的幫助! – CrashBandicoot

+0

當您創建主鍵和外鍵時,是否要創建另一個表? – CrashBandicoot

+0

定義主鍵和外鍵不會創建新表,它們會在表之間創建關係。他們的主要目的是確保數據的一致性;連接也可以在其他非主/非外鍵列上執行。 如果您創建了一個引用另一個表的主鍵的外鍵,例如引用部門(dept_id,dept_name)的'student(stud_id,dept_id)',它會做的一件事是確保您不能用不存在的部門ID在學生表中插入一個條目。 – Shruti

0

當您嘗試在允許具有空值的列上創建主鍵時,通常會發生這種情況。內容中可能沒有任何空值,但該定義仍允許使用它們。

將列定義更改爲不允許空值。

+0

謝謝!我認爲這只是將列更改爲不空的問題。 – CrashBandicoot