3

SQLで1000から10000の間の乱数を返す関数を作成したい

そして私はこれを作成します

 create function dbo.RandomPass()
RETURNS int
 as
    begin
    DECLARE @RETURN int
    DECLARE @Upper INT;
    DECLARE @Lower INT;
    DECLARE @Random float;
    set @Random=RAND();

      SET @Lower = 1000 
      SET @Upper = 9999 
      set @RETURN= (ROUND(((@Upper - @Lower -1) * @Random + @Lower), 0))

 return @RETURN
 end;

しかし、私はこのエラーが発生します

Invalid use of a side-effecting operator 'rand' within a function.
4

2 に答える 2

4

RAND() 関数は UDF で直接使用できないため、同じ関数を使用する別の方法を見つける必要があります。これは、RAND() 関数を使用する VIEW を作成し、UDF で同じ VIEW を使用することによって実現できます。

次のクエリを試してください:

CREATE VIEW rndView
AS
SELECT RAND() rndResult
GO


create function dbo.RandomPass()
RETURNS int
 as
    begin
    DECLARE @RETURN int
    DECLARE @Upper INT;
    DECLARE @Lower INT;
    DECLARE @Random float;

    SELECT @Random = rndResult
    FROM rndView

      SET @Lower = 1000 
      SET @Upper = 9999 
      set @RETURN= (ROUND(((@Upper - @Lower -1) * @Random + @Lower), 0))

 return @RETURN
 end;
于 2013-07-06T09:17:41.347 に答える