3

次のように2つのテーブルがあります。


「エリア」テーブル

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


「測定値」表

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


  • Readings テーブルの「AreaKey」は Areas テーブルの「AreaKey」への外部キーです。

Areas テーブルには、行 ID が 1 から 50 の範囲のデータが既に含まれています。

Readings テーブルにいくつかのサンプル データを入力したい - (1.0 から 100.0 の間の 'Reading' 列のランダムな float 値と、指定された DateTime 範囲の間の ReadingDateTime のランダムな datetime 値。たとえば、現在の datetime と 3 か月前の datetime の間) . Areas テーブルに既に存在する AreaKeys をランダムに選択して、これらの値を Reading テーブルに挿入する必要があります。


言い換えれば、ランダムな日時で、ランダムに選択された領域にランダムな読み取り値を挿入したいと考えています。

誰でもこれを行う方法の手がかりを教えてもらえますか?

4

3 に答える 3

2

RedGate の SQL Data Generatorをご覧になりましたか? RedGate ツールは、当社にとって大きな恩恵をもたらしています。

ツールの推奨事項はさておき、次のような簡単なアプリケーションを作成するだけです。

  1. Area テーブルのキーのリストを生成します
  2. Area テーブルにいくつかのランダム化されたレコードを挿入します
  3. ステップ 1 で作成したキーのリストからランダムな要素を選択して、いくつかのランダム化されたレコードを Readings テーブルに挿入します。
于 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 に答える