我有多对多的关系和3个表:A,B,C。
A和C每个只有一个主键,B有复合主键是表A和C的外键,仅此而已。
表A和C已经填充了数据,每个都有100行,现在我想在B中插入一行,包括来自A的随机密钥和来自C的随机密钥。如何实现?
这是我尝试的但我不知道如何在select语句中获取当前处理的行并且我现在卡住了...我甚至不知道这种陈述是否实际上是好的还是有更好的方法?
INSERT INTO B(bKey1, bKey2)
VALUES(
(select a.key1 from A a where Convert(int, rand() * 100.0) = currentRow? ),
(select c.key2 from C c where Convert(int, rand() * 100.0) = currentRow? )
);
即使将固定值插入1或2而不是“currentRow?”我遇到了以下错误,并且不明白为什么:
无法将值NULL插入列'bKey1',表'MyDataBase.dbo.B';列不允许空值。 INSERT失败。
我真的很感激任何帮助!
答案 0 :(得分:1)
要从每个表中获取随机记录,您可以cross join
将这些表放在一起,使用top 1
,然后按newid()
排序:
INSERT INTO B(bKey1, bKey2)
select top 1
a.key1,
c.key2
from A a
cross join C c
order by newid()