2013-07-02 2 views
2

У меня есть список идентификаторов сотрудников, позволяет сказать:выбора случайных данных из заданного списка

Q1654 
F2597 
Y9405 
B6735 
D8732 
C4893 
I9732 
L1060 
H6720 

Эти значения не в какой-либо одной из моих таблиц, но я хочу, чтобы создать функцию, которая будет принимать в нет параметров и вернуть случайное значение из этого списка. Как я могу это сделать?

ответ

2

Не вдаваясь в теорию случайных чисел, вот один способ:

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; 
+0

Да, но как я могу создать это как функцию? Я хочу вернуть значение, но я продолжаю получать инструкции «RETURN в скалярнозначных функциях, которые должны включать аргумент». Когда я пытаюсь вернуть varchar. – rjbogz

+0

@ user1911612 Я обновил решение, включив в него новую скрипту, и фактически создал функцию для возврата случайного значения. Я должен был рассмотреть, хотя для решения проблемы с использованием NEWID в скалярной функции. – xQbert

+0

Да, я закончил это, был просто упрям, когда я отправил свой комментарий ха-ха. Большое спасибо за ответ. Я полностью забыл о взглядах! – rjbogz

Смежные вопросы