如何从SQL中的一组数字中选择随机数

时间:2011-09-08 09:35:58

标签: sql sql-server sql-server-2008

我有一个包含所有NULL值的列的表。我想用一组给定数字中的随机数填充此列。

将从SELECT语句生成给定数字的集合,该语句从其他表中选择这些数字。

E.G:

UPDATE tableA
SET someColumnName = SomeRandomNumberFromSet(SELECT number from tb_Numbers)

如何使用MSSQL 2008实现此目的?

2 个答案:

答案 0 :(得分:4)

以下不是特别有效但有效。该视图需要解决“函数中无效使用副作用运算符'newid'的问题。”错误。假定UDF是非确定性的,因此将始终为每一行重新评估。

这将避免SQL Server向计划添加假脱机并重放早期结果的任何问题。

如果要更新的行数(或集合中的数字)要大得多,我就不会使用这种方法。

CREATE VIEW dbo.OneNumber
AS
SELECT  TOP 1 number 
            FROM    master..spt_values 
            ORDER BY NEWID()

GO

CREATE FUNCTION dbo.PickNumber ()
RETURNS int
AS
BEGIN
    RETURN (SELECT number FROM dbo.OneNumber)
END

GO

DECLARE @tableA TABLE (someColumnName INTEGER)
INSERT INTO @tableA VALUES (2), (2), (2), (2), (2)

UPDATE  @tableA
SET     someColumnName = dbo.PickNumber()

SELECT * FROM @tableA

答案 1 :(得分:0)

很久以前我问了类似的question,并得到了一些不同的选择。

Is this a good or bad way of generating random numbers for each record?


一旦您可以生成从1到n的随机数,您可以使用它从列表中选择Xth irem。 (最简单的方法是在您的合法值集上设置序列ID。)