向表中添加唯一的,随机的500万行

时间:2017-03-05 04:09:21

标签: sql-server database-design

对于MSSQL 2014,我需要帮助将500万个随机行添加到表中,使用varchar(25)pk列,第二个BIGINT&第3个nvarchar(256)。我该如何编写脚本?

[所以,我想首先将值填充到主键列和BIGINT列中。每次我为此运行脚本时,在数据类型转换期间出现算术溢出错误。]

$TAIL $SQUID | gawk -v var2=$PRINCIPAL2 '{if ($7 == var2) {print $3; fflush(); system("/usr/sbin/squid -k reconfigure")}' >> $LOG

2 个答案:

答案 0 :(得分:2)

在自动提交事务中逐行累加5,000,000行需要很长时间。

这可以通过简单地删除导致错误的部分来解决问题,并且应该更快地执行。

INSERT INTO Alok
            (Col1,
             Col2)
SELECT TOP (5000000) FORMAT(ROW_NUMBER() OVER (ORDER BY @@SPID), 'D25'),
                     ABS(CAST(CRYPT_GEN_RANDOM(8) AS BIGINT))
FROM   master..spt_values v1,
       master..spt_values v2 

答案 1 :(得分:1)

这是第一次算术溢出:

DECLARE @Upper INT
...
SET @Upper = 9223372036854775807

如果将其更改为BIGINT,则这是第二个:

DECLARE @Random INT
...
SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)

将这些更改为bigint后,插入应该开始成功