SSMSを使用して既存のテーブルにPurchaseOrderID
という新しい列を作成したいとします。それはLineNumber
とPONUMBER
を組み合わせて代理キーを作成し、テーブルにというモードを入力してそこにPKを割り当てます。既存のテーブルに代理キー列を作成するにはどうすればよいですか?
ALTER TABLE FactPurchaseOrders
ADD PurchaseOrderID VARCHAR(64);
値を取り込み:
新しい列の作成私はPKこのコラムを割り当てることができませんこれで現在
UPDATE FactPurchaseOrders
SET PurchaseOrderID = (CONVERT(VARCHAR(64), LineNumber) + CONVERT(VARCHAR(64), PONUMBER))
WHERE 1=1;
をし、それがNULL可能であるので、私は信じています。 デザインモードで最初に作成しようとしましたが、同じ問題が発生します。最も確かにそうである
うまくいけば、私は何かが欠けていないんだけど、あなたは列の値を更新した後、あなたは '許可を確認した上でPKを作成しますテーブルデザイナで「Nulls」チェックボックスを選択し、PK制約を追加する前に定義を保存しますか? – bassrek
また、検証のポイントとして、 '' PurchaseOrderID、COUNT(*)からFactPurchaseOrders GROUP BY PurchaseOrderID HAVING COUNT(*)> 1'を実行して、PK制約が作成されない重複行がないことを確認できます。 – bassrek
なぜその列を作成していますか?効果的に計算された列を作成することは、本当に悪い考えです。両方の列でPKを作成するだけです。それが何らかの理由で(単一列のPKだけをサポートする非常に不十分なフロントエンドのように)不可能な場合は、計算された列にします。それは基本的なデータベース設計原則に違反しようとしており、結果として苦痛の世界に向かいつつあります。 –