2010-02-16 51 views
4

我有大約25張表,我想用從數據子集中挑選的隨機數據進行更新。我希望隨機挑選數據,但有意義 - 比如將數據庫中的所有名字隨機更改爲新的名字。所以我不想在字段中隨意使用垃圾,我想從臨時表中提前填充。建議使用隨機數據更新許多表中的數據的方法?

我能想到的唯一方法就是使用循環和一些動態sql。

  1. 插入接機從名稱到臨時表中 與id字段
  2. 在 表列表
  3. 的foreach表名:
    1. 建立動態的SQL更新所有 名字字段是一個名 隨手拈根據從臨時表RAND()* MAX(id)的臨時表

但任何時候我認爲SQL中的「循環」我認爲我做錯了什麼。

有問題的數據庫有很多它規格化表的,所以這就是爲什麼我覺得我需要一個循環(名字段散佈在數據庫)。

有沒有更好的方法?

回答

0

通過回答我自己的問題來打破第四堵牆。

我沒有嘗試這個作爲一個SQL腳本。我學到的是,SQL幾乎是隨意的。劇本很慢,怪異 - 這引用了只爲腳本創建,不能在tempdb中進行意見的功能。

所以我做了一個控制檯應用程序。

  1. 生成的隨機數據,容易 與Random類做(只是 記住,只能使用 隨機的一個實例)。
  2. 找出想要通過 查看 information_schema的腳本更新哪些列和表 的名稱。
  3. 獲取所有表的ID ,你要去 如果可能的更新,(哇將 它是緩慢的,如果你有一個大表 不會有什麼好PKS)。
  4. 一次更新每個表100行。爲什麼100?不知道。可能是1000.我只是選了一個數字。 Dictionary在這裏很方便:使用Random類從字典中選擇一個隨機ID。

洗滌,沖洗,重複。這樣我在一小時內就更新了大約220萬行。也許它可能會更快,但它做了許多小的更新,所以它沒有得到任何人的支持。

3

紅門有一個名爲SQL Data Generator的產品,可以爲測試目的生成假名稱和其他假數據。這不是免費的,但他們有一個試用版,所以你可以測試它,它可能比試圖自己做的更快。

(聲明:我從來沒有使用過這個產品,但我一直很高興與他們的一些其他產品。)

+0

同意,RG生產固體的東西。我們在這裏有幾個紅門工具,但不是這個。 – jcollum 2010-02-17 15:20:59

1

我寫了一個存儲過程,做這樣的事情而回。它不像紅門產品的好,只做名字,但如果你需要的東西快速和骯髒的,你可以從

http://www.joebooth-consulting.com/products/

下載腳本的名稱是GenRandNames.sql

希望這有助於