我正在尝试生成大约 100 亿条唯一的数字集数据记录
桌子:
CREATE TABLE GenNumbers
(
NumID BIGINT
,Number1 INT
,Number2 INT
,Number3 INT
,Number4 INT
,Number5 INT
,Number6 INT
)
插入:
INSERT GenNumbers (NumID, Number1, Number2, Number3, Number4, Number5, Number6)
SELECT NumID
,Number1
,Number2
,Number3
,Number4
,Number5
,Number6
FROM (
SELECT
S.Value AS NumID,
MAX(CASE WHEN N.RowNum = 1 THEN N.Number END) AS Number1,
MAX(CASE WHEN N.RowNum = 2 THEN N.Number END) AS Number2,
MAX(CASE WHEN N.RowNum = 3 THEN N.Number END) AS Number3,
MAX(CASE WHEN N.RowNum = 4 THEN N.Number END) AS Number4,
MAX(CASE WHEN N.RowNum = 5 THEN N.Number END) AS Number5,
ABS(CHECKSUM(NEWID()) % 50) + 1 AS Number6
FROM GENERATE_SERIES(1, 10000000000) S --10 Billion
CROSS APPLY (
SELECT
S2.value AS Number,
ROW_NUMBER() OVER(ORDER BY R.Randomizer) AS RowNum
FROM GENERATE_SERIES(1, 100) S2
CROSS APPLY(
--SELECT CHECKSUM(NEWID(), S.value, S2.value) AS Randomizer
SELECT HASHBYTES('MD5', CONCAT(NEWID(), S.value, S2.value)) AS Randomizer
) R
) N
GROUP BY S.Value
--ORDER BY S.Value
) GN;
错误:
消息 5373,级别 16,状态 1,第 48 行
所有输入参数应为同一类型。支持的类型为 tinyint、smallint、int、bigint、decimal 和 numeric。
消息 206,级别 16,状态 2,第 48
行 操作数类型冲突:int 与 void 类型不兼容
消息 206,级别 16,状态 2,第 48
行 操作数类型冲突:numeric 与 void 类型不兼容
我可以生成 5000 万条记录而不会看到错误,但是一旦超过 1 亿条记录,一段时间后就会看到错误弹出。
我以为我看到的错误是因为我的“NumID”是 INT,所以我将其更改为 BIGINT,但似乎仍然不起作用。