我写了一个随机函数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行,其中包含Id
和Number
列。
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之间(temptable中的行),每个Id也有值。
请帮忙。
答案 0 :(得分: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()