建议一种用随机数据更新许多表中数据的方法?

时间:2010-02-16 23:22:40

标签: sql sql-server

我有大约25个表,我想用从数据子集中挑选的随机数据进行更新。我希望随机选择数据但有意义 - 比如将数据库中的所有名字随机更改为新的名字。所以我不想在字段中随机垃圾,我想从提前填充的临时表中提取。

我能想到的唯一方法是使用循环和一些动态sql。

  1. 将挑选名称插入临时表中 与id字段
  2. foreach表名列表中的 表:
    1. 构建一个更新所有内容的动态sql 名字字段是名称 基于来自临时表
    2. 的rand()* max(id)从临时表中随机选取
  3. 但是,无论何时我认为SQL中的“循环”,我认为我做错了。

    有问题的数据库里面有很多非规范化的表,所以我认为我需要一个循环(第一个名称字段分散在数据库中)。

    有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

Red Gate有一个名为SQL Data Generator的产品,可以生成虚假名称和其他虚假数据用于测试目的。这不是免费的,但他们有一个试用版,所以你可以测试它,它可能比试图自己做更快。

(免责声明:我从未使用过此产品,但我对其他产品非常满意。)

答案 1 :(得分:1)

我写了一个存储过程来做这样的事情。它不如Red Gate产品那么好,只有名字,但如果你需要快速和脏的东西,你可以从

下载

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

脚本名称为GenRandNames.sql

希望这有帮助

答案 2 :(得分:0)

通过回答我自己的问题来打破第四道墙。

我确实尝试过这个sql脚本。我学到的是SQL几乎随意乱糟糟的。该脚本很慢且很奇怪 - 引用仅为脚本创建的视图的函数,无法在tempdb中创建。

所以我做了一个控制台应用程序。

  1. 轻松生成随机数据 与Random类(只是 记得只使用一个实例 随机)。
  2. 找出哪些列和表 您想要通过的名称更新 一个看着的脚本 INFORMATION_SCHEMA。
  3. 获取ID 对于你要去的所有桌子 如果可能的话更新(哇会 如果你有一张大桌子,它会很慢 没有任何好的PKs)。
  4. 一次更新每个表100行。为什么100?不知道。可能是1000.我刚选了一个号码。字典在这里很方便:使用Random类从dict中选择一个随机ID。
  5. 洗涤,冲洗,重复。我用这种方式每小时更新了大约220万行。也许它可能会更快,但它正在进行许多小更新,所以它没有任何人的方式。