我有一个包含所有NULL值的列的表。我想用一组给定数字中的随机数填充此列。
将从SELECT语句生成给定数字的集合,该语句从其他表中选择这些数字。
E.G:
UPDATE tableA
SET someColumnName = SomeRandomNumberFromSet(SELECT number from tb_Numbers)
如何使用MSSQL 2008实现此目的?
答案 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。)