如何从SQL中的一组数字中选择随机数
问题描述:
我有一个包含具有所有NULL值的列的表。我想用给定的一组数字中的随机数来填充这一列。如何从SQL中的一组数字中选择随机数
给定数字的集合将从SELECT语句中生成,该SELECT语句从其他表中选择这些数字。
E.G:
UPDATE tableA
SET someColumnName = SomeRandomNumberFromSet(SELECT number from tb_Numbers)
这种使用2008 MSSQL如何做到?
答
以下不是特别有效,但有效。该视图需要绕过“在函数中无效使用副作用运算符'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
答
很久以前我问了一个类似的question,并得到了几个不同的选择。
Is this a good or bad way of generating random numbers for each record?
一旦你可以生成从1到n的随机数,你可以用它来选择从列表中的第X IREM。 (最简单的方法是在您的一组合法值上设置顺序标识。)
你想允许可能的重复吗?即每个'someColumnName'从tb_Numbers中随机选择“pick”?此外,这些数字连续完全是任意的。 –
@Martin Smith:是的,可以使用重复。 – Draco
你有多少个数字?要更新多少行?你可以在数字表中添加一个序列号列来生成一个在该范围内的随机数,并查找特定的匹配行,而不是反复按'newid()' –