Не вдаваясь в теорию случайных чисел, вот один способ:
http://sqlfiddle.com/#!6/192f2/1/0
он в основном использует функцию NewID, чтобы сгенерировать случайное значение, то сортирует этим возвращающееся верхнюю 1 запись.
Учитывая, что он должен быть в функции, а функция не может использовать newID ... вставляя представление в середине, устраняет проблему.
Select * into myRand FROM (
SELECT 'Q1654' as val UNION
SELECT 'F2597'UNION
SELECT 'Y9405'UNION
SELECT 'B6735'UNION
SELECT 'D8732'UNION
SELECT 'C4893'UNION
SELECT 'I9732'UNION
SELECT 'L1060'UNION
SELECT 'H6720') b;
Create View vMyRand as
Select top 1 val from myRand order by NewID();
CREATE FUNCTION GetMyRand()
RETURNS varchar(5)
--WITH EXECUTE AS CALLER
AS
BEGIN
Declare @RetValue varchar(5)
[email protected] =
Select @RetValue = val from vmyRand
RETURN(@retValue)
END;
Да, но как я могу создать это как функцию? Я хочу вернуть значение, но я продолжаю получать инструкции «RETURN в скалярнозначных функциях, которые должны включать аргумент». Когда я пытаюсь вернуть varchar. – rjbogz
@ user1911612 Я обновил решение, включив в него новую скрипту, и фактически создал функцию для возврата случайного значения. Я должен был рассмотреть, хотя для решения проблемы с использованием NEWID в скалярной функции. – xQbert
Да, я закончил это, был просто упрям, когда я отправил свой комментарий ха-ха. Большое спасибо за ответ. Я полностью забыл о взглядах! – rjbogz