Создать функцию генерации случайных чисел в SQL Server - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь создать функцию в 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 голосов
/ 09 июля 2019

Создайте 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
0 голосов
/ 09 июля 2019

Можно. Тем не менее, это потребует немного дополнительной работы.

Во-первых, вам нужно создать представление, как показано ниже:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...