如何在现有表中创建代理键列?

时间:2016-10-04 19:12:09

标签: sql sql-server sql-server-2008 tsql ssms

我想使用SSMS在现有表中创建一个名为PurchaseOrderID的新列。它结合了LineNumberPONUMBER来创建代理键,然后我将进入表设计模式并在那里为它分配PK。

创建新专栏:

ALTER TABLE FactPurchaseOrders
ADD PurchaseOrderID VARCHAR(64);

填充值:

UPDATE FactPurchaseOrders
SET PurchaseOrderID = (CONVERT(VARCHAR(64), LineNumber) + CONVERT(VARCHAR(64), PONUMBER))
WHERE 1=1;

目前,我无法将此列分配给PK,我相信因为它可以为空。 我也尝试先在设计模式下创建它,并出现同样的问题。

Error when trying to save PK

1 个答案:

答案 0 :(得分:2)

情况肯定是这样的。运行更新后,只需将PK中使用的列更改为NOT NULL即可。由于列现在具有值,因此可以将其设置为NOT NULL,然后它将允许分配PK。还要确保桌面上还没有其他PK。只能有1个!

  1. 更新记录
  2. 将列更改为不为空
  3. 在字段上创建PK