2013-07-02 36 views
2

我有員工ID列表中選擇隨機數據,讓說:從預定義列表

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

是的,但我怎樣才能創建這個功能?我想返回值,但是當我嘗試返回一個varchar時,我一直在獲取標量值函數中的RETURN語句必須包含一個參數。 – rjbogz

+0

@ user1911612我已經更新瞭解決方案以包含一個新的小提琴,並且實際構建了函數以返回一個隨機值。儘管如此,爲了解決在標量函數中使用NEWID的問題,我不得不提出一個觀點。 – xQbert

+0

是的,我結束了這麼做,當我發表評論哈哈時,我只是固執己見。非常感謝答案。我完全忘了意見! – rjbogz