我想在使用SSMS的現有表格中創建一個名爲PurchaseOrderID
的新列。它結合了LineNumber
和PONUMBER
來創建代理鍵,然後我會進入表設計模式並在那裏爲其分配一個PK。如何在現有表中創建代理鍵列?
創建新列:
ALTER TABLE FactPurchaseOrders
ADD PurchaseOrderID VARCHAR(64);
與值填充:
UPDATE FactPurchaseOrders
SET PurchaseOrderID = (CONVERT(VARCHAR(64), LineNumber) + CONVERT(VARCHAR(64), PONUMBER))
WHERE 1=1;
這個我無法分配此列中的PK
目前,我相信,因爲它可爲空。 我也曾嘗試在設計模式下首先創建它,併發生同樣的問題。
但願我不是失去了一些東西PK,但你更新的列值後,你檢查的'允許表設計器中的「空」複選框並在添加PK約束之前保存定義? – bassrek
同樣作爲驗證的一點,您可以運行'SELECT PurchaseOrderID,COUNT(*)FROM FactPurchaseOrders GROUP BY PurchaseOrderID HAVING COUNT(*)> 1'來確保沒有重複的行也會阻止創建PK約束。 – bassrek
爲什麼你要創建該列?創建一個有效的計算列是一個非常糟糕的主意。只需將PK放在兩列上即可。如果由於某種原因無法實現(比如僅支持單列PK的非常不足的前端),則將其作爲計算列。事實上,你試圖違反基本的數據庫設計原則,結果你正在走向一個痛苦的世界。 –