【发布时间】:2010-06-13 08:38:15
【问题描述】:
如何在 SQL Server 2008 中编写存储过程,在整数数据类型的两列中生成 300 万个随机数。
【问题讨论】:
标签: sql tsql sql-server-2008 stored-procedures
如何在 SQL Server 2008 中编写存储过程,在整数数据类型的两列中生成 300 万个随机数。
【问题讨论】:
标签: sql tsql sql-server-2008 stored-procedures
SELECT TOP 3000000
ABS(CHECKSUM(NewId())) As RndCol1,
ABS(CHECKSUM(NewId())) AS RndCol2
FROM
sys.objects s1
CROSS JOIN sys.objects s2
CROSS JOIN sys.objects s3
CROSS JOIN sys.objects s4
[您可能希望使用卡方检验检查这些数字的实际分布]
更新:这些随机性可能不符合卡方分布检验。我建议根据您的情况进行测试。
【讨论】:
您可以使用 CTE,例如:
create procedure dbo.GiveMeRandomNumbers
as
begin
with qry as (
select CAST(CAST(NEWID() AS VARBINARY) AS INT) as col1
, CAST(CAST(NEWID() AS VARBINARY) AS INT) as col2
, 0 as i
union all
select CAST(CAST(NEWID() AS VARBINARY) AS INT) as col1
, CAST(CAST(NEWID() AS VARBINARY) AS INT) as col2
, i + 1
from qry
where i < 3000000
)
select col1, col2
from qry
option (maxrecursion 0)
end
这使用newid,因为rnd 函数将为CTE 的每个递归应用程序返回相同的结果。
【讨论】: