У меня есть новое поле varchar (10) в базе данных с более чем 1000 записями. Я хочу обновить таблицу, чтобы в поле были случайные данные. Я ищу решение SQL.
Я знаю, что могу использовать курсор, но это кажется неэлегантным.
MS-SQL 2000, кстати


Возможно, вы сможете адаптировать что-то так для загрузки тестового набора данных значений, в зависимости от того, что вы ищете
Если это одноразовая вещь, просто чтобы получить данные в системе, я действительно не вижу проблем с использованием курсора, поскольку я ненавижу курсоры, у них есть свое место.
Кроме того, если вы делаете это просто для тестирования или одноразового использования, я бы сказал, что элегантное решение на самом деле не нужно.
update MyTable Set RandomFld = CONVERT(varchar(10), NEWID())
К сожалению, здесь нет SQLServer, поэтому я не смог его протестировать.
Это присваивает каждой записи одно и то же значение randomm. stackoverflow.com/questions/94906/… будет рандомизировать каждую строку и работает в SQL2000
Как насчет этого:
UPDATE TBL SET Field = LEFT( CONVERT(varchar(255), @myid),10)
Почему бы не использовать первые 10 символов контрольной суммы md5 текущей метки времени и случайное число?
если вы находитесь в SQL Server, вы можете использовать
CAST(RAND() as varchar(10))
РЕДАКТИРОВАТЬ: это будет работать только внутри итерации. Как часть многострочной вставки он будет использовать один и тот же результат RAND () для каждой строки.
Что-то вроде (непроверенный код):
UPDATE yourtable
SET yourfield= CHAR(32+ROUND(RAND()*95,0));
Очевидно, объедините больше случайных символов, если вы хотите до десяти символов. Возможно, оптимизатор запросов установит для всех полей одно и то же значение; в таком случае я бы попробовал
SET yourfield=LEFT(yourfield,0)+CHAR…
чтобы заставить оптимизатор каждый раз пересчитывать выражение.
С этим дополнением UPDATE table SET field = CONVERT (varchar (10), LEFT (NEWID (), 10))