2011-09-08 172 views
2

我有一个包含具有所有NULL值的列的表。我想用给定的一组数字中的随机数来填充这一列。如何从SQL中的一组数字中选择随机数

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

E.G:

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

这种使用2008 MSSQL如何做到?

+0

你想允许可能的重复吗?即每个'someColumnName'从tb_Numbers中随机选择“pick”?此外,这些数字连续完全是任意的。 –

+0

@Martin Smith:是的,可以使用重复。 – Draco

+0

你有多少个数字?要更新多少行?你可以在数字表中添加一个序列号列来生成一个在该范围内的随机数,并查找特定的匹配行,而不是反复按'newid()' –

回答

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 
相关问题