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

How to create a surrogate key column in existing table?

我想使用 SSMS 在现有 table 中创建一个名为 PurchaseOrderID 的新列。它结合了 LineNumberPONUMBER 来创建一个代理键,然后我将进入 table design 模式并在那里为其分配一个 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 中使用的列更改为 NOT NULL。由于列现在将具有值,因此可以将其设置为 NOT NULL,然后它将允许分配 PK。还要确保 table 上还没有另一个 PK。只能有1个!

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