【问题标题】:SQL - What am I doing wrong with this "Insert Into Select" QuerySQL - 这个“插入选择”查询我做错了什么
【发布时间】:2017-06-21 02:56:19
【问题描述】:

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

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 条记录,所以这是一个非常漫长的过程,我不希望手动进行。提前致谢。

【问题讨论】:

  • 我不知道你的问题是什么。您的查询看起来语法正确。显然你遇到了一些问题,但我无法从问题中确定它是什么。

标签: sql sql-server database select


【解决方案1】:

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

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 查询以插入一定数量的行(如果行可用)。

【讨论】:

  • 这行得通,谢谢,我想我在连接方面想得太多了。
猜你喜欢
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多