我有一张这样的桌子:
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 中运行。