RAND Fonksiyonu ile t-sql'de rasgele 0 ile 1 arası float değerler elde edebiliriz.
Print RAND()
---------------------
0.892616
RAND fonksiyonundan üretmiş olduğumuz float değeri 1000 ile çarpıp, int'e cast ettiğimiz zaman 0-999 arası rasgele bir değer oluşacaktır.
Print CAST(RAND() * 1000 AS INT)
---------------------
893
İstersek RAND fonksiyonuna vereceğimiz bir parametre ile, bu paremetreye özel rasgele değerler oluşturabiliriz.
Aşağıdaki kod, Rand fonksiyonunu "5" parametresiyle çalıştırıyor ve her zaman aynı sonucu gösterecektir, taki parametre değişene kadar.
Print RAND(5)
---------------------
0.713667
Ancak RAND fonksiyonunu bir select sorgusu içersinde kullanma gereksinimi duyarsak, biraz amaçsız olacaktır.
SELECT TOP 10 RAND() AS RandomNumber, Title, FirstName, LastName
FROM Person.Contact
Bu durumu engellemek için NEWID Fonksiyonu kullanılabilir. NEWID, select sorgusu içersinde her çağrıldığında farklı bir GUID oluşturur. Biz bu GUID değerini önce VARBINARY'e sonrasında INT'e çevirerek rasgele bir sayı oluşturabiliriz. Ancak bu sayı negatif ve pozitif değerler içerecektir, ihtiyaca göre bu sayının mutlak değerini de ABS fonksiyonu ile alabiliriz.
İki değer arasında rasgele bir sayı oluşturmamız gerektiği zaman ise aşağıdaki fonksiyon bize yardımcı olacaktır.
DECLARE @RandomNumber float
DECLARE @RandomInteger int
DECLARE @MaxValue int
DECLARE @MinValue int
SET @MinValue = 100
SET @MaxValue = 150
SET @RandomNumber = RAND()
SET @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue
Print @RandomNumber
Print @RandomInteger
-------------------------------------
0.424566
121