TSQL псевдо-случайный текстовый генератор - PullRequest
4 голосов
/ 28 января 2010

Я провожу тестирование производительности на SQL sproc и просто хочу использовать быстрый генератор данных для тестирования.

Мне нужен простой способ сгенерировать псевдослучайное (истинное случайное не требуется в данном случае) поле varchar.

Идеи, которые у меня есть, - это определение символов действительных символов, которые можно использовать, а затем построить строку из этого определения и использовать псевдослучайную длину для изменения длины с определенной длиной max / min.

Edit:

Мой генератор тестовых данных:

DECLARE @MyDataTable TABLE
(
  RecID int IDENTITY(1,1) PRIMARY KEY,
  SomeText varchar(255)
)

DECLARE @RecId int, @SomeText varchar(255),
        @maxlength int, @minlength int, 
        @RecordCount int, @Counter int
SET @maxlength = 254
SET @minlength = 50
SET @RecordCount = 500000
SET @Counter = 1

WHILE (@Counter < @RecordCount)
BEGIN
 INSERT INTO @MyDataTable
 (
  SomeText
 )
 SELECT  TOP 1
 ( 
   select top (abs(checksum(newid())) % (@maxlength-@minlength) + @minlength) char(abs(checksum(newid())) % 26 + ascii('A'))  
   from sys.all_objects a1
   where sign(a1.object_id) = sign(t.object_id) /* Meaningless thing to force correlation */
   for xml path('')
 ) as NewRandomString 
 FROM sys.all_objects t;
 SET @Counter = @Counter + 1
END

Ответы [ 4 ]

11 голосов
/ 28 января 2010

Я недавно написал пост в блоге.

http://msmvps.com/blogs/robfarley/archive/2009/12/07/randomising-data.aspx

select top (@stringlength) char(abs(checksum(newid())) % 26 + ascii('A')) 
from sys.all_objects 
for xml path('')
;

Редактировать: Извините - случайные вещи не включены ...

SELECT 
(
  select top (abs(checksum(newid())) % (@maxlength-@minlength) + @minlength) char(abs(checksum(newid())) % 26 + ascii('A')) 
  from sys.all_objects 
  for xml path('')
) as NewRandomString
FROM yourTable; /* Maybe something like dbo.nums? */

Редактировать: Извините - необходимо коррелировать ...

SELECT  
( 
  select top (abs(checksum(newid())) % (@maxlength-@minlength) + @minlength) char(abs(checksum(newid())) % 26 + ascii('A'))  
  from sys.all_objects a1
  where sign(a1.object_id) = sign(t.object_id) /* Meaningless thing to force correlation */
  for xml path('')
) as NewRandomString 
,*
FROM sys.all_objects t;
4 голосов
/ 28 января 2010

Для SQL Server 2008

SELECT
    --fixed length
    CAST(CRYPT_GEN_RANDOM(50) AS varchar(100)),
    --variable length
    CAST(CRYPT_GEN_RANDOM(ABS(CHECKSUM(NEWID()))%50) AS varchar(100))

Примеры:

r¡Ñ”ã8Ò¯wß×1W=ýÎÜTÜN:Læ*é=Öô/qAtmտ׌1):¢ìèð’¾N
mÁ­BòºÇòWãmßyWßðÛ2ﬔœ¹t ¦2›ÏÀë?î7Ä›››ºªb

Мой злой близнец хочет использовать это как генератор паролей ...

2 голосов
/ 28 января 2010

Будет сгенерирована случайная строка переменной длины.

DECLARE     @text nvarchar(255),
            @length int,
            @i int;
SET @i = 0
SET @text = ''
SET @length = RAND() * 50 + 215
WHILE (@i < @length)
BEGIN
    SET @text = @text + CHAR(RAND() * 26 + 65)
    SET @i = @i + 1
END
1 голос
/ 27 февраля 2014

Если вам это нужно быстро или вы не хотите делать это самостоятельно, Вы также можете использовать инструмент из

http://www.generatedata.com/

, но вы можете создать только 100 строк, если вы просто используете онлайн-демонстрацию.

...