如何在 TSQL 中生成随机字符串

发布于 2024-10-09 19:25:30 字数 156 浏览 0 评论 0原文

如何生成随机字符串? 我写了以下内容,结果给出了我唯一的一封信!

declare @alphaCount int
set @alphaCount =  @alphaCount +1
CHAR(@alphaCount)

提前致谢!

How can I generate a random string?
I wrote the following, which gave my only one letter as a result !

declare @alphaCount int
set @alphaCount =  @alphaCount +1
CHAR(@alphaCount)

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不美如何 2024-10-16 19:25:30

这将为您提供指定格式的 10,000 行。

DECLARE @Numbers  TABLE
(
n INT PRIMARY KEY
);


WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),   --2
        E02(N) AS (SELECT 1 FROM E00 a, E00 b), --4
        E04(N) AS (SELECT 1 FROM E02 a, E02 b), --16
        E08(N) AS (SELECT 1 FROM E04 a, E04 b), --256
        E16(N) AS (SELECT 1 FROM E08 a, E08 b)  --65,536
INSERT INTO @Numbers
SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM E16        

SELECT CAST((SELECT TOP 20 CHAR(CASE
                                  WHEN Abs(Checksum(Newid()))%2 = 0 THEN 65
                                  ELSE 97
                                END + Abs(Checksum(Newid()))%26)
             FROM   @Numbers n1
             WHERE  n1.n >= -n2.n /*So it gets re-evaluated for each row!*/
             FOR XML PATH('')) AS CHAR(20))
FROM   @Numbers n2  

This will give you 10,000 rows in the specified format.

DECLARE @Numbers  TABLE
(
n INT PRIMARY KEY
);


WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),   --2
        E02(N) AS (SELECT 1 FROM E00 a, E00 b), --4
        E04(N) AS (SELECT 1 FROM E02 a, E02 b), --16
        E08(N) AS (SELECT 1 FROM E04 a, E04 b), --256
        E16(N) AS (SELECT 1 FROM E08 a, E08 b)  --65,536
INSERT INTO @Numbers
SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM E16        

SELECT CAST((SELECT TOP 20 CHAR(CASE
                                  WHEN Abs(Checksum(Newid()))%2 = 0 THEN 65
                                  ELSE 97
                                END + Abs(Checksum(Newid()))%26)
             FROM   @Numbers n1
             WHERE  n1.n >= -n2.n /*So it gets re-evaluated for each row!*/
             FOR XML PATH('')) AS CHAR(20))
FROM   @Numbers n2  
原谅我要高飞 2024-10-16 19:25:30

用随机单词列表填充临时表。然后使用 CROSS JOIN 将每个单词与其他单词组合起来,轻松获得大量数据。

select l.word+' '+r.word from #Words as l
cross join #Words as r

Fill a temporary table with a list of random words. Then use CROSS JOIN to combine every word with every other word, to get a whole ton of data with little effort.

select l.word+' '+r.word from #Words as l
cross join #Words as r
兮颜 2024-10-16 19:25:30

此过程将起作用。您可能必须用它创建一个函数,但它有正确的想法。

This procedure will work. You may have to create a function with it, but it has the right ideas.

紫﹏色ふ单纯 2024-10-16 19:25:30

如果您想将其设为用户定义的函数,这应该可以解决如何做的问题

DECLARE @length         Integer
DECLARE @return         VarChar(1000)
DECLARE @index          Integer
DECLARE @value          Integer

SET @length = 12
SET @return = '';

IF @length > 1000
    SET @length = 1000;

IF @length <= 0
    SELECT @return;

SET @index = 0;

WHILE @index < @length
BEGIN
    SET @value = (64 * RAND()) + 32;
    SET @return = @return + CHAR(@value);

    SET @index = @index + 1;
END 

SELECT @return;

,我喜欢本文中的“steve”选项。 此处

This should do the trick for how to

DECLARE @length         Integer
DECLARE @return         VarChar(1000)
DECLARE @index          Integer
DECLARE @value          Integer

SET @length = 12
SET @return = '';

IF @length > 1000
    SET @length = 1000;

IF @length <= 0
    SELECT @return;

SET @index = 0;

WHILE @index < @length
BEGIN
    SET @value = (64 * RAND()) + 32;
    SET @return = @return + CHAR(@value);

    SET @index = @index + 1;
END 

SELECT @return;

If you wanted to make this a user defined function, i liked the option 'steve' had in this article. here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文