我有一個包含具有所有NULL值的列的表。我想用給定的一組數字中的隨機數來填充這一列。如何從SQL中的一組數字中選擇隨機數
給定數字的集合將從SELECT語句中生成,該SELECT語句從其他表中選擇這些數字。
E.G:
UPDATE tableA
SET someColumnName = SomeRandomNumberFromSet(SELECT number from tb_Numbers)
這種使用2008 MSSQL如何做到?
我有一個包含具有所有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()' –