Не так давно писал на T-SQL генератор данных, включающий в себя функцию со случайным значением шума. Наткнулся на то, что функция RAND() не может быть использована в рамках UDF (user defined function), выдавая при этом сообщение "Invalid use of a side-effecting operator ‘rand’ within a function". Удалось найти достаточно интересны способ обхода данного ограничения.
Сначала необходимо создать представление, которое при каждом вызове будет генерировать новое рандомное значение:
Теперь можно создавать функцию, возвращающую произвольные значения. С учетом того, что мне нужно было создать функцию, которая бы выдавала произвольные значения от -1 до 1, то выглядит она так:
CREATE VIEW v_RandomizeView AS SELECT RAND() AS Result
Теперь можно создавать функцию, возвращающую произвольные значения. С учетом того, что мне нужно было создать функцию, которая бы выдавала произвольные значения от -1 до 1, то выглядит она так:
CREATE FUNCTION f_Randomize() RETURNS float AS BEGIN RETURN 2 * (SELECT TOP 1 Result FROM v_RandomizeView) - 1 END GO
Комментариев нет:
Отправить комментарий