Sql server 在T-SQL中生成随机字符串

Sql server 在T-SQL中生成随机字符串,sql-server,tsql,Sql Server,Tsql,可能重复: 我需要在触发器中生成一个包含字母和数字字符的随机字符串 字符串的长度必须为15且大写 有人有主意了吗?生成一个GUID并只取前15个字符 生成一组随机数并将其转换为ASCII值?这远不是最佳解决方案,但它将按规定工作: select char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65) +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)

可能重复:

我需要在触发器中生成一个包含字母和数字字符的随机字符串

字符串的长度必须为15且大写


有人有主意了吗?

生成一个GUID并只取前15个字符


生成一组随机数并将其转换为ASCII值?

这远不是最佳解决方案,但它将按规定工作:

select char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
      +char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
示例输出:

WCZOVRCIRELAJUT

是否需要在单个语句中使用?不确定这是否是一个好主意。guid的前15个字符可能不是那么随机。。。但话说回来,它们可能是随机的。@JoelCoehoorn:可能会让它看起来很花哨,然后抓取前6个,最后5个,最后4个从中间的某个地方来。GUID的一部分基于MAC地址,需要避免这种情况。我很确定GUID是散列的。GUID中没有固定的部分即使在同一个MAC上也会保持不变。我认为
cast(cast(NEWID()作为varbinary(max))作为varchar(max))
就是您在这个答案中建议的。一个潜在的问题是,会有像ASCII 0(null)这样的随机特殊字符。如果15的长度是固定的,或者这是一些测试设置的一部分,那么它就是防弹的。