自动字符串生成器

时间:2019-02-21 14:16:33

标签: sql sql-server

在SQL中是否可以生成随机的字母数字字符串?

当前字符串是“ Mxxxx”和“ Pxxxx”,其中xxxx只是一个序列号。

我需要一种格式,在位置1、2和4处使用字母数字字符,在位置3和5处使用特殊字符。所有这些都是随机且唯一的。

字母数字字符为A – Z,1 –9。特殊字符为*,+,=,#,/,%,&、!和?。

是否可以在SQL Server中使用这种格式生成400个列表?

谢谢

3 个答案:

答案 0 :(得分:1)

请参阅我的博客文章,其中介绍了使用纯TSQL生成随机字符串的方法: “ SQL: generate random character string”。第二种方法没有任何字符串长度限制。

答案 1 :(得分:0)

您可以在以下几行中使用类似的内容。

DECLARE @AlLChars varchar(100) = 'ABCDEFGHIJKL'
DECLARE @Numerics varchar(100) = '12345678910'
DECLARE @SpecialChars varchar(10) = '*+=#/%&!?'
DECLARE @I INT = 1
WHILE @I <= 400
BEGIN
INSERT INTO tblStrings 
SELECT 
 RIGHT( LEFT(@AlLChars,ABS(BINARY_CHECKSUM(NEWID())%26) + 1 ),1) 
+RIGHT( LEFT(@Numeric,ABS(BINARY_CHECKSUM(NEWID())%10) + 1 ),1) 
+RIGHT( LEFT(@SpecialChars,ABS(BINARY_CHECKSUM(NEWID())%9) + 1 ),1) 
+RIGHT( LEFT(@AlLChars,ABS(BINARY_CHECKSUM(NEWID())%26) + 1 ),1) 
+RIGHT( LEFT(@SpecialChars,ABS(BINARY_CHECKSUM(NEWID())%9) + 1 ),1) 
SET @I = @I + 1
END;

答案 2 :(得分:0)

您可以执行以下操作:

;WITH ALPHA AS (
SELECT DISTINCT CHAR(object_id) AS C FROM sys.columns SC 
   WHERE 
     object_id BETWEEN ASCII('A') AND ASCII('Z')
     OR object_id BETWEEN  ASCII('0')  AND  ASCII('9')
), SPC AS(
SELECT DISTINCT CHAR(object_id) AS S FROM sys.columns SC 
    WHERE 
      object_id IN (ASCII('*'), ASCII('+'), ASCII('='), ASCII('#'),     ASCII('/'), ASCII('%'), ASCII('&'), ASCII('!'))    
)
SELECT TOP 10 A1.C + A2.C + A3.C + S1.S + S2.S + S3.S
   FROM 
      ALPHA A1, ALPHA A2, ALPHA A3, SPC S1, SPC S2, SPC S3
   ORDER BY NEWID()

在妊娠期尝试:stackoverflow-54809150-auto-string-generator

根据需要调整符号的数量和位置。

当心

这是相当消耗资源的! 如果需要多次运行,请准备具有计算值的表,然后从中进行选择。