我想在SQL SERVER2008中生成100000個不重複的隨機數。如何在SQL SERVER2008中生成100000個不重複的隨機數
這些數字必須像1和100000之間以下:
RandNumber
100
9
1000
34
67
546
64000
我想在SQL SERVER2008中生成100000個不重複的隨機數。如何在SQL SERVER2008中生成100000個不重複的隨機數
這些數字必須像1和100000之間以下:
RandNumber
100
9
1000
34
67
546
64000
既然沒有意義的記錄在SQL表中的順序,你所要做的就是創建連續的整數表
--Create the table and populate it
SELECT TOP 100000 IDENTITY(int,1,1) AS IntValue
INTO NumbersTable
FROM sys.objects s1
CROSS JOIN sys.objects s2
-- Set the IntValue column as the primary key and clustered index
ALTER TABLE NumbersTable ADD CONSTRAINT PK_NumbersTable PRIMARY KEY CLUSTERED (IntValue)
從該表可以按隨機順序使用這樣的查詢,然後選擇號碼:
從1到100000 說,類似的東西值-- Select values in a random order
SELECT IntValue
FROM NumbersTable
ORDER BY NEWID()
NEWID()函數生成一個uniqueIdentifier(GUID)。由於guid是以隨機順序創建的,因此可以使用它來隨機對查詢輸出進行排序。
'INSERT INTO dbo.Test(ID)SELECT IntValue FROM NumbersTable ORDER BY NEWID()'not random order – user3757263
@ user3757263因爲從關係透視表中的行是無序的。因此,SQL Server 2012+只是在這裏優化了'ORDER BY'[並忽略它](http://stackoverflow.com/questions/11222043/table-valued-function-order-by-is-ignored-in-output/ 11231935#11231935)。 –
我開始我的答案**因爲沒有意義的記錄在SQL表**的順序**。正如馬丁史密斯所說的那樣,當將記錄插入表格時不能對記錄進行排序。 –
您可以使用遞歸CTE來生成數字。
CREATE TABLE [Numbers]
(
[Number] INT,
CONSTRAINT [PK_Numbers] PRIMARY KEY ([Number])
);
WITH [cteNumbers]
AS (SELECT 1 AS [Number]
UNION ALL
SELECT [cteNumbers].[Number] + 1
FROM [cteNumbers]
WHERE [cteNumbers].[Number] < 100000)
INSERT INTO [Numbers]
([Number])
SELECT [cteNumbers].[Number]
FROM [cteNumbers]
OPTION (MAXRECURSION 0);
注意,用遞歸CTE是沒有必要的數字存儲在一個表中使用它們,你可以簡單地用在需要的地方遞歸CTE定義。
只記得包括OPTION (MAXRECURSION 0)
。
如果您想以隨機順序使用數字,請使用order them randomly。
我想,而不是使用while循環中,下面的方法會更好:
DECLARE @TempTable TABLE(Numbers INT)
;WITH CTE AS
(
SELECT 0 Units UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL
SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
)
INSERT INTO @TempTable(Numbers)
SELECT Unit.Units + Hundred.Units * 10 + Thousand.Units * 100
+ Lakh.Units * 1000 + TenLakhs.Units * 10000 + 1 Numbers
FROM CTE Unit,
CTE Hundred,
CTE Thousand,
CTE Lakh,
CTE TenLakhs
SELECT *
FROM @TempTable
只需在上面的查詢用一個簡單的數學。
CREATE TABLE Numbers (id bigint IDENTITY(1,1) NOT NULL)
INSERT Numbers DEFAULT VALUES
GO 100000
SELECT id FROM Numbers ORDER BY NewID()
GO
http://stackoverflow.com/questions/19875588/generate-random-numbers-using-sql –
如果你想1 100000在10萬個的數字沒有重複只有一個組數字無論如何都適合!你問如何隨機訂購這些東西? –
它怎麼可能是一個沒有「不重複」約束的問題的重複?隨機訂購數字1..100000與挑選1000000個隨機數字不同,後者可能相同。請注意這個問題本身,而不僅僅是標題。 – user2864740