Ни RAND
, ни NEWID
не могут быть напрямую связаны с функцией.
Вы можете косвенно ссылаться на них через представление, хотя. Так что вы можете использовать
CREATE VIEW dbo.RandomInt
AS
SELECT CAST(CRYPT_GEN_RANDOM(4) AS INT) AS Number
GO
CREATE FUNCTION U228_TEST_USER_1.mask_firstn ()
RETURNS VARCHAR(15)
AS
BEGIN
DECLARE @OneToFive TINYINT = (SELECT 1 + ABS(Number % 5) FROM dbo.RandomInt);
RETURN
(SELECT CHOOSE(@OneToFive, 'JAMES', 'JOHN', 'ROBERT', 'MICHAEL', 'MARY'))
END
Скалярных UDF, как правило, следует избегать, но в этом случае, вероятно, все будет в порядке - включение делает более вероятным, что результат будет оцениваться только один раз, а не для каждой строки, что нежелательно в случае генерации случайных данных.