易谷歌:1 2 ...
在SELECT语句中返回随机数
当前SQL Server中的RAND()函数实现方式是,无法让你在SELECT语句中每一行返回不同的随机数。例如,如果执行以下代码:
SELECT Rand() as RandomNumber, *
FROM Northwind..Customers
你会看到同一个数字一遍又一遍。但有时,您可能希望在 SELECT 中的每一行返回一个随机生成的数字。以下是一种在 SQL Server 2000 中使用 UDF 实现此目的的方法。
首先,我们需要创建一个视图,返回一个随机数:
CREATE VIEW vRandNumber
AS
SELECT RAND() as RandNumber
视图是必要的,因为通常在UDF中我们不能使用rand()函数,因为那会使函数变得不确定。我们可以通过使用视图来欺骗UDF接受一个随机数。
一旦设置好了,我们就可以创建我们的函数:
CREATE FUNCTION RandNumber()
RETURNS float
AS
BEGIN
RETURN (SELECT RandNumber FROM vRandNumber)
END
最后,您可以在任何SELECT中使用此函数,以便每行返回0到1之间的随机数:
SELECT dbo.RandNumber(), *
FROM Northwind..Customers
如果您喜欢,您可以在RandNumber函数中接受种子或允许范围参数,以使其更加高级:
CREATE FUNCTION RandNumber2(@Min int, @Max int)
RETURNS float
AS
BEGIN
RETURN @Min + (select RandNumber from RetRandNumber) * (@Max-@Min)
END