3

我有两个表如下。


“区域”表

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


“读数”表

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


  • Readings 表中的“AreaKey”是 Areas 表中“AreaKey”的外键。

区域表已经有一些行 id 范围从 1 到 50 的数据。

我想用一些示例数据填充读数表 - (“读数”列的随机浮点值介于 1.0 和 100.0 之间,以及给定日期时间范围之间的 ReadingDateTime 的随机日期时间值;例如在当前日期时间和 3 个月前的日期时间之间) . 这些值应该通过随机选择已经存在于 Areas 表中的 AreaKeys 插入到 Reading 表中。


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

谁能给我一个关于如何做到这一点的线索?

4

3 回答 3

2

你看过RedGate 的 SQL 数据生成器吗?RedGate 工具对我们公司来说是一大福音。

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

  1. 为您的 Area 表生成一个键列表
  2. 将一些随机记录插入到您的区域表中
  3. 将一些随机记录插入到您的读数表中,从您在步骤 #1 中创建的键列表中选择随机元素
于 2013-01-23T04:42:56.043 回答
2

假设您的 Areas 表有 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

祝你好运。

于 2013-01-23T05:00:07.930 回答
1

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

Select column into #temp from table
order by NEWID()
于 2013-01-23T04:41:49.973 回答