我正在尝试在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”。
答案 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