SQL - 这个“插入选择”查询我做错了什么

时间:2017-06-21 02:56:20

标签: sql sql-server database select

我必须用测试数据填充数据库,我的数据库与交付有关。这就是我想要做的事情:

Insert into Orders (OrderCode, OrderDate, Insurance,QuickDelivery, PackageNumber, ClientID, AdressID, DeliveryID, OrderStatusID)
    Select SUBSTRING(CONVERT(varchar(255), NEWID()), 0, 20),
           D.OrderDate,
           FLOOR(RAND()*(1-0)+0),
           FLOOR(RAND()*(1-0)+0),
           FLOOR(RAND()*(5-1)+1),
           FLOOR(RAND()*(200-1)+1),
           FLOOR(RAND()*(704-505)+505),
           FLOOR(RAND()*(200-1)+1),
           FLOOR(RAND()*(9-5)+5)
    from Deliveries D join
         Orders O
         on D.OrderID = O.OrderID
    where D.OrderDate = FLOOR(RAND()*(200-1)+1)

无论哪种方式,在交付表中我都有大量随机生成的示例,只有OrderID和一个随机日期,我正在尝试从该表中选择一些日期并将它们插入到这一个中,因此订单日期和交货日期匹配。无论哪种方式,我的想法是从表中选择一个随机ID,并获取该记录的日期并将int插入Orders表。当我尝试声明一个带有一些随机日期的变量并将其插入参数列表时,查询起作用,所以我必须错过这个连接或其他东西。我需要至少有1000条记录,所以这是一个非常漫长的过程,我不想手动完成。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您只想从Deliveries获取randome日期,则Orders查询中不需要select。这应该足够了:

Insert into Orders (OrderCode, OrderDate, Insurance,QuickDelivery, PackageNumber, ClientID, AdressID, DeliveryID, OrderStatusID)
    Select SUBSTRING(CONVERT(varchar(255), NEWID()), 0, 20),
           D.OrderDate,
           FLOOR(RAND()*(1-0)+0),
           FLOOR(RAND()*(1-0)+0),
           FLOOR(RAND()*(5-1)+1),
           FLOOR(RAND()*(200-1)+1),
           FLOOR(RAND()*(704-505)+505),
           FLOOR(RAND()*(200-1)+1),
           FLOOR(RAND()*(9-5)+5)
    from Deliveries D ;

您可以向top (n)查询添加select以插入一定数量的行(如果行可用)。