使用复合键将模拟数据插入到 SQL 中的关联表中

Posted

技术标签:

【中文标题】使用复合键将模拟数据插入到 SQL 中的关联表中【英文标题】:Inserting mock data into an associative table in SQL with a composite key 【发布时间】:2016-11-23 00:12:29 【问题描述】:

潜伏已久的第一次海报!

我正在开发一个 SQL 数据库以配合我的 Web 应用程序使用。我有两个关联表来连接多对多关系。我正在使用 Mockaroo 根据需要为我的表生成模拟数据,然后我来到我的关联表。

我现在的架构如下所示:

CREATE TABLE Test (
dirtId INT NOT NULL,
lightId INT NOT NULL,
PRIMARY KEY (dirtId, lightId),
FOREIGN KEY (dirtId) REFERENCES Dirts (id),
FOREIGN KEY (lightId) REFERENCES Lights (id)
);

我正在尝试弄清楚如何为我的主键生成模拟数据,甚至在使用这样的复合键时如何生成 INSERT 语句的格式。

对于我的外键,我没有看到仅在另一个表中的值中使用随机整数填充它的问题,但我不确定语法或使用 mockaroo 完成此操作的方式。提前致谢!

【问题讨论】:

【参考方案1】:

使用 CTE 的简单示例。

;with tbl as (
select 1 id
union all
select id+1
from tbl where id<10
)
--insert myTable
select t1.id dirtId, t2.id lightId
from tbl t1 cross join tbl t2

如果您的 DBMS 不支持 CTE,那么另一种解决方案。

create table #tbl (id int)
declare @id int = 1
while @id < 11
begin
insert #tbl values(@id)
set @id += 1
end
--insert myTable
select t1.id dirtId, t2.id lightId
from #tbl t1 cross join #tbl t2
--drop table #tbl

或者,如果您在 DirtsLights 中有某些内容,则以相同的方式使用它们。

【讨论】:

以上是关于使用复合键将模拟数据插入到 SQL 中的关联表中的主要内容,如果未能解决你的问题,请参考以下文章

使用外键将 XML 数据插入 SQL 表

使用实体框架将行插入到具有复合键的表中

如何将数据插入到通过外键相关的两个表中?

如何把查询一个数据库表中的查询结果插入到另一个数据库表中(高分!)

SQL插入,使用合并存储过程更新

详解如何定义SQL Server外关键字约束