gpt4 book ai didi

sql-server - 使用 T-SQL 创建可视化骰子滚轴(仅供娱乐)

转载 作者:行者123 更新时间:2023-12-03 02:52:22 25 4
gpt4 key购买 nike

只是为了好玩,我想使用 SQL 创建一个可视化的骰子滚轴(我知道这几乎不是该语言的设计目的)。

我想出了下面的代码,它将掷出任意数量的骰子 (@Dice) 并显示每个骰子的视觉表示,就像普通的六面骰子一样.

CREATE TABLE #Row1 ([1] CHAR(1), [2] CHAR(1), [3] CHAR(1))
CREATE TABLE #Row2 ([1] CHAR(1), [2] CHAR(1), [3] CHAR(1))
CREATE TABLE #Row3 ([1] CHAR(1), [2] CHAR(1), [3] CHAR(1))

DECLARE @Number INT
DECLARE @Count INT = 1
DECLARE @Dice INT = 2

WHILE @Count <= @Dice
BEGIN
SET @Number = ROUND(RAND(CONVERT(VARBINARY,NEWID()))*6,0,1)+1

INSERT INTO #Row1 ([1], [2], [3]) VALUES (
CASE WHEN @Number < 4 THEN ''
ELSE '•'
END
,''
,CASE WHEN @Number = 1 THEN ''
ELSE '•'
END
)

INSERT INTO #Row2 ([1], [2], [3]) VALUES (
CASE WHEN @Number <> 6 THEN ''
ELSE '•'
END
,CASE WHEN @Number % 2 = 0 THEN ''
ELSE '•'
END
,CASE WHEN @Number <> 6 THEN ''
ELSE '•'
END
)

INSERT INTO #Row3 ([1], [2], [3]) VALUES (
CASE WHEN @Number = 1 THEN ''
ELSE '•'
END
,''
,CASE WHEN @Number < 4 THEN ''
ELSE '•'
END
)

SELECT * FROM #Row1
UNION ALL
SELECT * FROM #Row2
UNION ALL
SELECT * FROM #Row3

TRUNCATE TABLE #Row1
TRUNCATE TABLE #Row2
TRUNCATE TABLE #Row3

SET @Count += 1
END

DROP TABLE #Row1
DROP TABLE #Row2
DROP TABLE #Row3

我的问题是,如何才能提高效率?有没有办法在没有这么多 UNION 的情况下做到这一点?

我也有兴趣了解人们可能对此进行扩展/使其变得更有趣的任何想法!

最佳答案

使用表变量而不是临时表。并将所有三行包含在同一个表变量中:

DECLARE @Rows TABLE ([Row] INT, [1] NCHAR(1), [2] NCHAR(1), [3] NCHAR(1));
DECLARE @Number INT;
DECLARE @Count INT = 1;
DECLARE @Dice INT = 2;

WHILE @Count <= @Dice
BEGIN
SET @Number = ROUND(RAND(CONVERT(VARBINARY,NEWID()))*6,0,1)+1;

INSERT INTO @Rows ([Row], [1], [2], [3]) VALUES
(
1
,CASE WHEN @Number < 4 THEN N'' ELSE N'•' END
,N''
,CASE WHEN @Number = 1 THEN N'' ELSE N'•' END
),
(
2
,CASE WHEN @Number <> 6 THEN N'' ELSE N'•' END
,CASE WHEN @Number % 2 = 0 THEN N'' ELSE N'•' END
,CASE WHEN @Number <> 6 THEN N'' ELSE N'•' END
),
(
3
,CASE WHEN @Number = 1 THEN N'' ELSE N'•' END
,N''
,CASE WHEN @Number < 4 THEN N'' ELSE N'•' END
);

SELECT [1], [2], [3] FROM @Rows ORDER BY [Row];
DELETE FROM @Rows;

SET @Count += 1;
END;

编辑:

我更新了我的解决方案,以便将三个记录插入到单个 INSERT 语句中,而不是为每个记录插入三个单独的 INSERT 语句。

关于sql-server - 使用 T-SQL 创建可视化骰子滚轴(仅供娱乐),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com