使用随机数据填充表

时间:2013-01-23 04:34:50

标签: sql sql-server-2008

我有两张表如下。


'区域'表

|    AreaKey      |    AreaID    |
|-----------------|--------------|
| <identity/int>  |  <varchar>   |


''读物'表

|    ReadingKey   |      AreaKey      |   Reading   |    ReadingDateTime   |
|-----------------|-------------------|-------------|----------------------|
| <identity/int>  |<FK:AreaKey-Areas> |   <float>   |      <datetime>      |


  • 读数表中的“AreaKey”是“区域”表中“AreaKey”的外键。

区域表已经有一些数据,其行ID为1到50。

我想用一些示例数据填充Readings表 - (在1.0和100.0之间的'Reading'列的随机浮点值和给定DateTime范围之间的ReadingDateTime的随机日期时间值;例如在当前日期时间和日期时间之间3几个月后)。应通过随机选择区域表中已存在的AreaKeys将这些值插入到阅读表中。


换句话说,我想将随机读取值插入随机选择的区域,并随机显示日期时间。

任何人都可以告诉我如何做到这一点吗?

3 个答案:

答案 0 :(得分:2)

你看过RedGate's SQL Data Generator了吗? RedGate工具对我们公司来说是一件好事。

除了工具建议,只需编写一个快速的应用程序:

  1. 生成区域表的键列表
  2. 将一些随机记录插入您的区域表
  3. 将一些随机记录插入您的读数表,从您在步骤1中创建的键列表中挑选随机元素

答案 1 :(得分:2)

假设您的Regions表有50条记录,行ID为1-50,我只会考虑使用RAND函数。

这样的事似乎有效:

SELECT ROUND(((50 - 1 -1) * RAND() + 1), 0) as AreakKey,
    ROUND(((100 - 1 -1) * RAND() + 1), 1) as Reading,
    DATEADD(mm,-3,GETDATE()) +
(
ABS(
    CAST(
        CAST( NewID() AS BINARY(8) ) AS INT
    )
)
%
CAST(
    (GETDATE() - DATEADD(mm,-3,GETDATE())) AS INT
    )
) as ReadingDateTime   

这里有一些SQL Fiddle

祝你好运。

答案 2 :(得分:1)

您可以使用NEWID()并将结果选择到临时表中。请检查http://msdn.microsoft.com/en-us/library/ms190348.aspx

Select column into #temp from table
order by NEWID()