1

我写了一个随机函数dbo.UDF_Q_RandomNumber(),它生成一个介于 0 和 1 之间的浮点型随机数。

DECLARE @upper = 10    
DECLARE @lower = 1    

SELECT  
    ROUND(CAST((@lower + (@upper - @lower) * dbo.UDF_Q_RandomNumber()) AS INT), 0) 

上面的代码生成一个介于 1 到 10 之间的随机数。

现在我创建了一个#tempTable包含 10 行的临时表,其中包含列IdNumber.

Id  Number
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10  10 

SQL查询:

CREATE TABLE #tempTable(Id INT, Number INT)

INSERT INTO #tempTable VALUES (1,1)
INSERT INTO #tempTable VALUES (2,2)
INSERT INTO #tempTable VALUES (3,3)
INSERT INTO #tempTable VALUES (4,4)
INSERT INTO #tempTable VALUES (5,5)
INSERT INTO #tempTable VALUES (6,6)
INSERT INTO #tempTable VALUES (7,7)
INSERT INTO #tempTable VALUES (8,8)
INSERT INTO #tempTable VALUES (9,9)
INSERT INTO #tempTable VALUES (10,10)

DECLARE @maxCount INT;

SELECT @maxCount=  COUNT(1) FROM #tempTable

SELECT * FROM #tempTable

SELECT Number 
FROM #tempTable 
WHERE Id = ROUND(CAST((1+(@maxCount-1)*dbo.UDF_Q_RandomNumber())AS INT),0)
DROP TABLE #tempTable

这里是查询

SELECT Number 
FROM #tempTable 
WHERE Id = ROUND(CAST((1+(@maxCount-1)*dbo.UDF_Q_RandomNumber()) AS INT), 0)

有时它返回 2 行,有时返回 null 不应该出现,因为选择的 Id 介于 1 和 10 之间(临时表中的行),并且每个 Id 也有值。

请帮忙 。

4

1 回答 1

0

没有看到函数,很难说,但我怀疑你的函数是不确定的,所以它被解释为表的每一行。

如果你使用rand()它只返回一行

 SELECT Number FROM #tempTable WHERE Id= ROUND(CAST((1+(@maxCount-1)*rand())AS INT),0)

或者,如果您只想要随机@n行...

 select top (@n) * from #tempTable order by newid()
于 2012-11-07T11:04:56.927 回答