предложить метод обновления данных во многих таблицах со случайными данными? - PullRequest
4 голосов
/ 17 февраля 2010

У меня есть около 25 таблиц, которые я хотел бы обновить случайными данными, выбранными из подмножества данных. Я бы хотел, чтобы данные выбирались случайным образом, но имели смысл - например, меняя все имена в базе данных на новые имена случайным образом. Так что я не хочу случайного мусора в полях, я хотел бы извлечь из временной таблицы, которая заполняется заранее.

Единственный способ, которым я могу думать, это сделать с помощью цикла и некоторого динамического SQL.

  1. вставлять имена пикапов во временную таблицу с полем id
  2. имя каждой таблицы в списке столы:
    1. построить динамический SQL, который обновляет все Имя поля, чтобы быть именем выбирается случайным образом из временной таблицы на основе rand () * max (id) из временной таблицы

Но всякий раз, когда я думаю, что в SQL "зацикливается", я думаю, что я делаю что-то не так.

В рассматриваемой базе данных много денормализованных таблиц, поэтому я думаю, что мне нужен цикл (поля с именами разбросаны по всей базе данных).

Есть ли лучший способ?

Ответы [ 3 ]

3 голосов
/ 17 февраля 2010

Red Gate имеет продукт под названием Генератор данных SQL , который может генерировать поддельные имена и другие поддельные данные для целей тестирования. Это не бесплатно, но у них есть пробная версия, так что вы можете проверить это, и это может быть быстрее, чем пытаться сделать это самостоятельно.

(Отказ от ответственности: я никогда не использовал этот продукт, но я был очень доволен некоторыми другими их продуктами.)

1 голос
/ 17 февраля 2010

Я написал хранимую процедуру, чтобы сделать что-то подобное некоторое время назад.Он не так хорош, как продукт Red Gate, и выполняет только названия, но если вам нужно что-то быстрое и грязное, вы можете загрузить его с

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

Имя сценария GenRandNames.sql

Надеюсь, это поможет

0 голосов
/ 02 марта 2010

Немного сломав 4-ю стену, ответив на мой собственный вопрос.

Я попробовал это как скрипт sql. Что я узнал, так это то, что SQL в значительной степени отстой наугад. Скрипт был медленным и странным - функции, которые ссылались на представления, которые были созданы только для скрипта и не могли быть созданы в базе данных tempdb.

Итак, я сделал консольное приложение.

  1. Генерация случайных данных, легко делать с классом Random (просто не забудьте использовать только один экземпляр Random).
  2. Выясните, какие столбцы и таблицы имена, которые вы хотите обновить через скрипт, который смотрит на INFORMATION_SCHEMA.
  3. Получить идентификаторы для всех столов, которые вы собираетесь обновить, если возможно (и вау будет это будет медленно, если у вас большой стол это не имеет хороших ПК).
  4. Обновлять каждую таблицу по 100 строк за раз. Почему 100? Без понятия. Может быть 1000. Я просто выбрал номер. Здесь удобен словарь: выберите случайный идентификатор из условия, используя класс Random.

Вымойте, промойте, повторите. Таким образом, я обновил около 2,2 миллиона строк в час. Может быть, это могло бы быть быстрее, но он делал много небольших обновлений, чтобы никто не мешал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...