【发布时间】:2023-03-17 06:40:02
【问题描述】:
我的一位同事在 SQL Server 中发现了一种我不知道的行为。
CREATE VIEW dbo.vRandNumber AS
SELECT RAND() as RandNumber
GO
CREATE FUNCTION dbo.RandNumber() RETURNS float AS
RETURN (SELECT RandNumber FROM vRandNumber)
GO
DECLARE @mytable TABLE (id INT)
INSERT INTO @mytable SELECT 1
INSERT INTO @mytable SELECT 2
INSERT INTO @mytable SELECT 3
SELECT *, dbo.RandNumber() FROM @mytable
这似乎是为数据集中的每条记录生成“随机”值的最快方法。但我不完全确定这是记录在案的行为的结果,还是利用了奇怪的巧合。
你会使用这样的东西吗?
编辑
这不是关于 RAND() 函数本身优点的问题,而是使用 UDF/VIEW 组合强制它在每一行上重新计算的问题。 (在最终查询中仅使用 RAND(),而不是 dbo.RandNumber(),将为每条记录提供相同的值。)
此外,重点是每次查看时值都不同。例如,启用随机选择记录。
编辑
对于 SQL Server 2000+。
【问题讨论】:
标签: sql sql-server tsql sql-server-2000 random