在SQL Server中创建生成随机数函数

时间:2019-07-09 10:53:49

标签: sql-server

我正在尝试在SQL Server中创建函数。在此函数中,我生成了随机数,但未生成函数。

Create function [GetRandomNumber]
(
)
RETURNS bigint
as 
Begin
Declare @randomNo int
 set  @randomNo = (select round(rand(checksum(newid()))*(10001)+50000,0) as [GetRandomNumber])
 return @randomNo
End

这是在以下错误中生成的:

  

在函数中无效使用副作用运算符'newid'。
  消息443,级别16,状态1,过程GetRandomNumber,第8行
  在函数中无效使用副作用运算符“ rand”。

2 个答案:

答案 0 :(得分:0)

可以。但是,这需要一些额外的工作。

首先,您需要创建一个视图,如下所示:

create view dbo.sys_NDF
as
select rand() as [ValueRand], newid() as [ValueGUID],
  rand(checksum(newid())) as [SeededRand];
go

诀窍是您不能直接从UDF调用这些系统函数,但是可以查询返回其值的视图。您以后可以根据需要使用其他功能/列对其进行扩展。

这样,您的函数开始如下所示:

Create function [GetRandomNumber]()
RETURNS bigint as begin
return (select round(v.SeededRand * 10001 + 50000, 0) from dbo.sys_NDF v);
end;
go

答案 1 :(得分:0)

创建SP而不是功能。因为用户定义的功能不允许使用某些系统功能。

CREATE PROCEDURE  [GetRandomNumber]
as 
Begin
Declare @randomNo int
 set  @randomNo = (select round(rand(checksum(newid()))*(10001)+50000,0) as [GetRandomNumber])
 return @randomNo
End

GO
 DECLARE @returnvalue INT
 EXEC @returnvalue = GetRandomNumber
 SELECT @returnvalue