次のようなテーブルがあります。
CREATE Table tblClassProperty (
ClassPropertyID integer IDENTITY(1,1) PRIMARY KEY,
Active bit DEFAULT 0 NOT NULL,
DEL bit DEFAULT 0 NOT NULL,
FINAL bit DEFAULT 0 NOT NULL,
Locked bit DEFAULT 0 NOT NULL,
_Project integer FOREIGN KEY REFERENCES tblProject(ProjectID),
_Property integer FOREIGN KEY REFERENCES tblProperty(PropertyID),
_Class integer FOREIGN KEY REFERENCES tblClass(ClassID)
CONSTRAINT CClassProperty UNIQUE(_Project,_Property,_Class))
古いテーブル (別の DB 内) からこのテーブルにデータを移行しています。ほとんどの列について、他のテーブルからデータをコピーしているだけです。外部キー列は古い DB には存在しません。新しい DB の対応するテーブルにリンクされたランダムな値です。あなたのソリューションでは、列 _Project、_Property、および _Class の値を現在の方法で生成する必要があることを当然のことと考えてください ( SELECT TOP 1 ...
)
INSERT INTO ClassDB..tblClassProperty (Active, DEL, FINAL, Locked,
_Project, _Property, _Class)
SELECT Active, DEL, FINAL, Locked,
(SELECT TOP 1 ProjectID FROM ClassDB..tblProject ORDER BY NEWID()),
(SELECT TOP 1 PropertyID FROM ClassDB..tblProperty ORDER BY NEWID()),
(SELECT TOP 1 ClassID FROM ClassDB..tblClass ORDER BY NEWID()),
FROM ClassDB_Access..tblClassProperty
ここでINSERT INTO
、一意の制約が原因でスクリプトは実行されず、制約はそのままにしておく必要があります。
私の質問: 既存の列をコピーし、上記のように外部キーを生成するスクリプトが必要ですが、タプル ( _Project, _Property, _Class
) に対して生成された値は、制約に従って一意になります。
スクリプトは SQL Server 2008 R2 で実行する必要があり、将来的には Oracle でも実行する必要があります。