ちょうど今週、この問題が発生しました。意味のない代理キーを持つテーブルが、自然にキーが使用されるスキーマに導入されました。間違いなくこれをすぐに修正します:)それまでは、データのテーブルを作成して回避していますINSERT
。これは、永続的または一時的なベーステーブルまたは派生テーブル(以下を参照)であり、あなたのニーズに合うはずですとにかくセットベースのソリューションを望んでいます。このテーブルとIDENTITY
自然キーの列を含むテーブルとの間の結合を使用して、自動生成された値を見つけます。簡単な例を次に示します。
CREATE TABLE Test1
(
surrogate_key INTEGER IDENTITY NOT NULL UNIQUE,
natural_key CHAR(10) NOT NULL CHECK (natural_key NOT LIKE '%[^0-9]%') UNIQUE
);
CREATE TABLE Test2
(
surrogate_key INTEGER NOT NULL UNIQUE
REFERENCES Test1 (surrogate_key),
data_col INTEGER NOT NULL
);
INSERT INTO Test1 (natural_key)
SELECT DT1.natural_key
FROM (
SELECT '0000000001', 22
UNION ALL
SELECT '0000000002', 55
UNION ALL
SELECT '0000000003', 99
) AS DT1 (natural_key, data_col);
INSERT INTO Test2 (surrogate_key, data_col)
SELECT T1.surrogate_key, DT1.natural_key
FROM (
SELECT '0000000001', 22
UNION ALL
SELECT '0000000002', 55
UNION ALL
SELECT '0000000003', 99
) AS DT1 (natural_key, data_col)
INNER JOIN Test1 AS T1
ON T1.natural_key = DT1.natural_key;