Sql 用模拟数据填充连接表
我想填写这两个表的连接表:Sql 用模拟数据填充连接表,sql,sql-server,ssms,Sql,Sql Server,Ssms,我想填写这两个表的连接表: Create table [dbo].[Event] ( [id] int PRIMARY KEY IDENTITY (1,1) NOT NULL, [naam] varchar(30) NOT NULL, [periode] date NOT NULL, [maxbezoeker] int NOT NULL, [locatie] varchar(50) NOT NULL ) Create table [dbo].[Medew
Create table [dbo].[Event]
(
[id] int PRIMARY KEY IDENTITY (1,1) NOT NULL,
[naam] varchar(30) NOT NULL,
[periode] date NOT NULL,
[maxbezoeker] int NOT NULL,
[locatie] varchar(50) NOT NULL
)
Create table [dbo].[Medewerker]
(
[id] int PRIMARY KEY IDENTITY (1,1) NOT NULL,
[wachtwoord] varchar(100) NOT NULL,
[rechten] varchar(100) NOT NULL,
[gebruikersnaam] varchar(30) UNIQUE NOT NULL
)
连接表:
Create table [dbo].[Event_Medewerker]
(
[event_id] int FOREIGN KEY REFERENCES [dbo].[Event](id) NOT NULL,
[medewerker_id] int FOREIGN KEY REFERENCES [dbo].[Medewerker](id) NOT NULL
)
事件表和Medewerker表中目前有1000个模拟条目。我想把它们之间的数据联系起来,但除了生成1000个随机数之外,我想不出该怎么做。但如果我这样做,我觉得我最终会有一大堆未链接的条目。有没有更好的方法用模拟数据填充连接表
“Medewerker”是一名员工,在这种情况下,“事件”将是一个音乐节。我希望每一个事件都能与Medewerkers联系起来
我正在使用SQL Server 2014 Management Studio和mockaroo.com生成数据。因此,您可以根据每个表中的顺序ID值简单地连接两个表,因为这是模拟数据。然后可以使用联接的结果插入到链接表中。下面是一个简化的示例,您可以单独运行以进行测试:
CREATE TABLE #event ( id INT );
CREATE TABLE #medwerker ( id INT );
CREATE TABLE #event_medwerker
(
event_id INT ,
medwerker_id INT
);
INSERT INTO #event
( id )
VALUES ( 1 ), ( 2 ), ( 3 );
SELECT * FROM #event;
INSERT INTO #medwerker
( id )
VALUES ( 1 ), ( 2 ), ( 3 );
SELECT * FROM #medwerker;
INSERT INTO #event_medwerker
( event_id ,
medwerker_id
)
SELECT e.id ,
m.id
FROM #event e
INNER JOIN #medwerker m ON m.id = e.id;
SELECT * FROM #event_medwerker;
DROP TABLE #event_medwerker;
DROP TABLE #event;
DROP TABLE #medwerker;
因此,您可以根据每个表中的顺序ID值简单地连接两个表,因为这是模拟数据。然后可以使用联接的结果插入到链接表中。下面是一个简化的示例,您可以单独运行以进行测试:
CREATE TABLE #event ( id INT );
CREATE TABLE #medwerker ( id INT );
CREATE TABLE #event_medwerker
(
event_id INT ,
medwerker_id INT
);
INSERT INTO #event
( id )
VALUES ( 1 ), ( 2 ), ( 3 );
SELECT * FROM #event;
INSERT INTO #medwerker
( id )
VALUES ( 1 ), ( 2 ), ( 3 );
SELECT * FROM #medwerker;
INSERT INTO #event_medwerker
( event_id ,
medwerker_id
)
SELECT e.id ,
m.id
FROM #event e
INNER JOIN #medwerker m ON m.id = e.id;
SELECT * FROM #event_medwerker;
DROP TABLE #event_medwerker;
DROP TABLE #event;
DROP TABLE #medwerker;
一名“Medewerker”是一名员工,在这种情况下,“事件”将是一个音乐节。我希望每个活动都能与Medewerkers联系起来。
在这种情况下,您可以使用此查询
DECLARE @Event AS TABLE(id int)
DECLARE @Medewerker AS TABLE(id int)
DECLARE @Event_Medewerker AS TABLE (EventId int, MedewerkerId int)
INSERT INTO @Event
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9),(10)
INSERT INTO @Medewerker
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9),(10)
INSERT INTO @Event_Medewerker (EventId, MedewerkerId)
SELECT e.id AS EventID, md.id AS MedewerkerId
FROM
(SELECT * FROM @Event t) e
CROSS APPLY
(
SELECT TOP (ABS(Checksum(NewID()) % 10) + 2) * FROM @Medewerker t ORDER BY newid() -- random 2 - 12 item bat ki o bang @Medewerker
) md
ORDER BY e.id, md.id
SELECT * FROM @Event_Medewerker em
一名“Medewerker”是一名员工,在这种情况下,“事件”将是一个音乐节。我希望每个活动都能与Medewerkers联系起来。
在这种情况下,您可以使用此查询
DECLARE @Event AS TABLE(id int)
DECLARE @Medewerker AS TABLE(id int)
DECLARE @Event_Medewerker AS TABLE (EventId int, MedewerkerId int)
INSERT INTO @Event
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9),(10)
INSERT INTO @Medewerker
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9),(10)
INSERT INTO @Event_Medewerker (EventId, MedewerkerId)
SELECT e.id AS EventID, md.id AS MedewerkerId
FROM
(SELECT * FROM @Event t) e
CROSS APPLY
(
SELECT TOP (ABS(Checksum(NewID()) % 10) + 2) * FROM @Medewerker t ORDER BY newid() -- random 2 - 12 item bat ki o bang @Medewerker
) md
ORDER BY e.id, md.id
SELECT * FROM @Event_Medewerker em
我会使用一个临时表来填充所有可能的组合,包括一个随机的顺序号。然后迭代所有事件,每次确定一个随机量,并使用随机顺序号从临时表中插入以确定随机量 大概是这样的:
BEGIN
-- temp table
DECLARE @dummy_table table(Event_id int, Medewerker_id int, Order_nr int)
-- insert all possible combinations with a random order nr
insert into @dummy_table(Event_id, Medewerker_id, Order_nr)
select
ROW_NUMBER() OVER(PARTITION BY e.id ORDER BY newid() ASC), -- use newid() to randomize order
e.id,
m.id
from
Event e
join Medewerker m -- cross join
-- cursor for all events
DECLARE cur_evts CURSOR FOR SELECT Id FROM Event;
DECLARE @Event_id int
DECLARE @random_amount int
OPEN cur_evts;
FETCH NEXT FROM cur_evts INTO @Event_id;
-- iterate all events
WHILE @@FETCH_STATUS = 0
BEGIN
-- random amount between 50..500
SET @random_amount = 50 + (450 * RAND(convert(varbinary, newid())))
insert into Event_Medewerker(event_id, medewerker_id)
select
event_id,
medewerker_id
from
@dummy_table
where
Event_id = @Event_id
and order_nr < @random_amount
FETCH NEXT FROM cur_evts INTO @Event_id;
END
CLOSE cur_evts;
DEALLOCATE cur_evts;
END
开始
--临时表
声明@dummy_表(事件id int、Medewerker id int、订单编号int)
--以随机顺序插入所有可能的组合
插入@dummy_表(事件id、医务人员id、订单编号)
选择
ROW_NUMBER()OVER(按e.id顺序按newid()ASC划分),--使用newid()随机化顺序
e、 身份证,
m、 身份证
从…起
事件e
连接Medewerker m——交叉连接
--所有事件的游标
为从事件中选择Id声明cur_evts游标;
声明@Event_id int
声明@random_amount int
开放式电流互感器;
从cur_evts获取下一个到@Event_id;
--迭代所有事件
而@@FETCH\u STATUS=0
开始
--50到500之间的随机数量
设置@random_amount=50+(450*RAND(convert(varbinary,newid()))
插入事件\ Medewerker(事件\ id,Medewerker\ id)
选择
事件id,
梅德韦克尔
从…起
@虚拟表格
哪里
Event\u id=@Event\u id
订单数量<@随机数量
从cur_evts获取下一个到@Event_id;
结束
关闭当前EVT;
取消分配当前EVT;
结束
我会使用临时表来填充所有可能的组合,包括随机订购编号。然后迭代所有事件,每次确定一个随机量,并使用随机顺序号从临时表中插入以确定随机量
大概是这样的:
BEGIN
-- temp table
DECLARE @dummy_table table(Event_id int, Medewerker_id int, Order_nr int)
-- insert all possible combinations with a random order nr
insert into @dummy_table(Event_id, Medewerker_id, Order_nr)
select
ROW_NUMBER() OVER(PARTITION BY e.id ORDER BY newid() ASC), -- use newid() to randomize order
e.id,
m.id
from
Event e
join Medewerker m -- cross join
-- cursor for all events
DECLARE cur_evts CURSOR FOR SELECT Id FROM Event;
DECLARE @Event_id int
DECLARE @random_amount int
OPEN cur_evts;
FETCH NEXT FROM cur_evts INTO @Event_id;
-- iterate all events
WHILE @@FETCH_STATUS = 0
BEGIN
-- random amount between 50..500
SET @random_amount = 50 + (450 * RAND(convert(varbinary, newid())))
insert into Event_Medewerker(event_id, medewerker_id)
select
event_id,
medewerker_id
from
@dummy_table
where
Event_id = @Event_id
and order_nr < @random_amount
FETCH NEXT FROM cur_evts INTO @Event_id;
END
CLOSE cur_evts;
DEALLOCATE cur_evts;
END
开始
--临时表
声明@dummy_表(事件id int、Medewerker id int、订单编号int)
--以随机顺序插入所有可能的组合
插入@dummy_表(事件id、医务人员id、订单编号)
选择
ROW_NUMBER()OVER(按e.id顺序按newid()ASC划分),--使用newid()随机化顺序
e、 身份证,
m、 身份证
从…起
事件e
连接Medewerker m——交叉连接
--所有事件的游标
为从事件中选择Id声明cur_evts游标;
声明@Event_id int
声明@random_amount int
开放式电流互感器;
从cur_evts获取下一个到@Event_id;
--迭代所有事件
而@@FETCH\u STATUS=0
开始
--50到500之间的随机数量
设置@random_amount=50+(450*RAND(convert(varbinary,newid()))
插入事件\ Medewerker(事件\ id,Medewerker\ id)
选择
事件id,
梅德韦克尔
从…起
@虚拟表格
哪里
Event\u id=@Event\u id
订单数量<@随机数量
从cur_evts获取下一个到@Event_id;
结束
关闭当前EVT;
取消分配当前EVT;
结束
带有数据的示例架构
将数据插入桥接表代码
DECLARE@Event INT
,@Medewerker INT
,@RecordCount INT
,@minid INT=1
,@maxid INT
从[Event].id=[Medewerker].id上的[Event]内部联接[Medewerker]中选择@RecordCount=COUNT(1)
设置@maxid=@RecordCount
而(@minid带有数据的样本模式
将数据插入桥接表代码
DECLARE@Event INT
,@Medewerker INT
,@RecordCount INT
,@minid INT=1
,@maxid INT
从[Event].id=[Medewerker].id上的[Event]内部联接[Medewerker]中选择@RecordCount=COUNT(1)
设置@maxid=@RecordCount
虽然(@minid您希望数据如何链接?每个事件都应该有一个medeworker?或者很多不同的组合?很多不同的组合。对不起,我会在帖子中添加更多的解释如果您有顺序id,那么在每个表的id值上简单地连接它们以将记录插入链接表是否会有问题?因为他的是唯一的模拟数据,我不认为这会是一个问题。我有两个表的顺序id。你希望数据如何链接?每个事件都应该有一个medeworker?或许多不同的组合?许多不同的组合。对不起,我会在帖子中添加更多的解释如果你有顺序id,simp会有问题吗Y连接t