TSQL伪随机文本生成器

TSQL伪随机文本生成器,sql,tsql,random,Sql,Tsql,Random,我正在一个SQL存储过程上做一些性能测试,只想用一个快速的数据生成器进行测试 我在寻找一个简单的方法来生成一个伪随机真随机,在这个例子中不需要varchar字段 到目前为止,我的想法是对可以使用的有效字符进行字符定义,然后根据该定义构建字符串,并使用伪随机长度进行长度变化,定义最大/最小长度 编辑: 我的测试数据生成器: DECLARE @MyDataTable TABLE ( RecID int IDENTITY(1,1) PRIMARY KEY, SomeText varchar(2

我正在一个SQL存储过程上做一些性能测试,只想用一个快速的数据生成器进行测试

我在寻找一个简单的方法来生成一个伪随机真随机,在这个例子中不需要varchar字段

到目前为止,我的想法是对可以使用的有效字符进行字符定义,然后根据该定义构建字符串,并使用伪随机长度进行长度变化,定义最大/最小长度

编辑:

我的测试数据生成器:

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

我最近写了一篇关于这个的博客

编辑:抱歉-没有包括随机长度的东西

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;

这将生成一个长度可变的随机字符串

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
为了

样本:

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

我的邪恶孪生兄弟想用它作为密码生成器…

如果你需要它,或者你不想自己做, 您也可以从中使用该工具


但是,如果您仅使用在线演示,则只能生成100行

很抱歉编辑了。。。我想我应该把历史也留给你。您可能需要添加一个允许使用@maxlength-long:@maxlength-@minlength+1Thanks-Rob的字符串,我认为这是一个非常优雅的解决方案。通过无数次尝试,您正确地猜到了我的密码!
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