Ради интереса я хотел создать визуальный ролик для игры в кости с использованием 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
с?
Мне также было бы интересно узнать о том, какие у людей могут быть идеи по расширению этого / сделать его более интересным!