BG1*_*100 9 sql function non-deterministic
经过一些搜索和阅读文档之后,很明显您可以在SQL Server中编写用户定义的函数,这些函数被标记为确定性或非确定性,具体取决于正文中使用的内置函数.
RAND()列在非确定性函数下(参见msdn文章).那么为什么我不能在函数中使用它呢?
Lie*_*ers 19
使用View可能对您有用.
从select语句中返回随机数
CREATE VIEW vRandNumber
AS
SELECT RAND() as RandNumber
Run Code Online (Sandbox Code Playgroud)
视图是必要的,因为正如您已经发现的那样,UDF不能使用rand()函数,因为这会使函数无法确定.您可以使用View欺骗UDF接受随机数.
CREATE FUNCTION RandNumber()
RETURNS float
AS
BEGIN
RETURN (SELECT RandNumber FROM vRandNumber)
END
Run Code Online (Sandbox Code Playgroud)
最后,您可以在任何SELECT中使用此函数,现在返回每行0到1之间的随机数:
SELECT dbo.RandNumber(), *
FROM Northwind..Customers
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 13
因为它有副作用.
函数中不允许带有副作用的构造.它的副作用是改变一些内部状态,跟踪rand()发出的最后一个值.
我认为你可以通过将它包含在View定义中然后从View中选择来解决它.
| 归档时间: |
|
| 查看次数: |
7466 次 |
| 最近记录: |