如何在sql中生成不同的随机100000个数字作为介于(0-15000)之间的货币类型?

如何在sql中生成不同的随机100000个数字作为介于(0-15000)之间的货币类型?,sql,sql-server,random,Sql,Sql Server,Random,我看到了一些类似的问题,并提出了类似的问题: select RAND(CHECKSUM(NEWID())) 但问题是,当我将它设置为money类型时,它会丢失一些数字,然后一些行会再次相同 以下是我的全部代码,请给我一些建议 if(exists(select * from sysobjects where name='dump') ) drop table [dump] --create the table CREATE table [dump] (id in

我看到了一些类似的问题,并提出了类似的问题:

select RAND(CHECKSUM(NEWID()))
但问题是,当我将它设置为money类型时,它会丢失一些数字,然后一些行会再次相同

以下是我的全部代码,请给我一些建议

if(exists(select * from sysobjects where name='dump') )
    drop table [dump]

    --create the table
    CREATE table [dump]
    (id int ,name varchar(50), price money)

    declare @p money=0
    set @p= RAND(CHECKSUM(NEWID()))*15000
    --set initial value
    INSERT INTO dump
    values(@i,newID(),@p)
    --insert the rows
    WHILE(@i<100000)

    begin
    set @p=RAND(CHECKSUM(NEWID()))*15000
    set @i+=1
        INSERT INTO dump
        values(@i,newID(),@p) 
        print 'the nth row:'+cast(@i as varchar(15)) 
    end

这将生成10万个唯一值作为货币类型。这在我的服务器上运行了20秒

IF OBJECT_ID('tempdb..#dump') IS NOT NULL
    DROP TABLE #dump

CREATE TABLE #dump (Value MONEY)
CREATE INDEX [IXDUMP] ON #dump(Value)

DECLARE @i INT, @val MONEY
SET @i=1

WHILE @i <= 100000 /* SET THIS TO DESIRED COUNT */
BEGIN
    SELECT @val=CONVERT(MONEY,RAND()*15000)

    IF NOT EXISTS (SELECT 1 FROM #dump WHERE Value=@val)
    BEGIN
        INSERT INTO #dump(Value) 
        SELECT @val

        SET @i=@i+1
    END
    ELSE
    BEGIN
        PRINT '*'
        /* DO NOTHING, GO AGAIN, WITH SAME @i VALUE */
    END
END

/* DUPE VALUE CHECK */
SELECT Value
FROM #dump
GROUP BY Value
HAVING COUNT(2)>1

/* COUNT CHECK */
SELECT COUNT(2)
FROM #dump

请始终标记您的DMB,尤其是在处理数据类型时谢谢您的评论,很抱歉我的疏忽需要澄清-您是否正在尝试生成和存储100000个唯一的随机数?是的,我也尝试过不在,但它太慢了。如果转储中已经存在数字,请不要在其中插入数字,并保留一个唯一值的计数器,直到转储中的行数达到100000