如何根据其他表中的内容生成表内容?

时间:2015-10-29 17:01:09

标签: sql sql-server

我有多对多的关系和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失败。

我真的很感激任何帮助!

1 个答案:

答案 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()