Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用模拟数据填充连接表_Sql_Sql Server_Ssms - Fatal编程技术网

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