如何在现有 table 中创建代理键列?
How to create a surrogate key column in existing table?
我想使用 SSMS 在现有 table 中创建一个名为 PurchaseOrderID
的新列。它结合了 LineNumber
和 PONUMBER
来创建一个代理键,然后我将进入 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个!
- 更新记录
- 将列更改为非空
- 在字段上创建 PK
我想使用 SSMS 在现有 table 中创建一个名为 PurchaseOrderID
的新列。它结合了 LineNumber
和 PONUMBER
来创建一个代理键,然后我将进入 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个!
- 更新记录
- 将列更改为非空
- 在字段上创建 PK