Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie RAND() in der benutzerdefinierten Funktion

Das Problem besteht darin, dass Sie eine nicht deterministische Funktion nicht innerhalb einer benutzerdefinierten Funktion aufrufen können.

Ich habe diese Einschränkung umgangen, indem ich eine Ansicht erstellt habe, diese Funktion innerhalb der Ansicht aufgerufen und diese Ansicht in Ihrer Funktion verwendet habe, etwa so......

Ansichtsdefinition

CREATE VIEW vw_getRANDValue
AS
SELECT RAND() AS Value

Funktionsdefinition

ALTER FUNCTION getNumber(@_id int )
RETURNS DECIMAL(18,4)
AS
BEGIN
   DECLARE @RtnValue DECIMAL(18,4);
   SELECT TOP 1 @RtnValue = EmployeeID 
   FROM dbo.Employees
   ORDER BY EmployeeID DESC

   SET @RtnValue = (SELECT Value FROM vw_getRANDValue) * @RtnValue * (1.0000/100.0000) --<-- to make sure its not converted to int
    RETURN @RtnValue;
END