2010-02-16 48 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

希望这有助于