我有一张这样的桌子:
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))
我正在将旧表(在另一个数据库中)中的数据迁移到这个表中。对于大多数列,我只是从另一个表中复制数据。旧数据库中不存在外键列,它们只是与新数据库中相应表链接的随机值。对于您的解决方案,请理所当然地认为 _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 中运行。