من میخواستم یک سری عدد رندم بین ۰ تا ۳۶۰ رو داخل یکی از فیلدهای یک جدولم در دیتابیس قرار بدم.
SQL یک تایع RAND دارد که یک عدد رندم بین صفر تا یک تولید میکند. اما وقتی در Select از آن استفاده میکنیم برای همه رکوردها عدد مشابه تولید میکند.
Select Rand() As RandomNumber
From (Select 1 As NUM Union All
Select 2 Union All
Select 3) As Alias
مثال بالا اعدادی مشابه زیر تولید میکند:
RandomNumber
----------------------
0.920057583532051
0.920057583532051
0.920057583532051
پس خیلی برای مورد من کاربرد ندارد (البته که کاربرد خودش رو دارد). بر اساس این مطلب (SQL Server - Set based random numbers) به دستور زیر رسیدم که بسیار کار راهانداز است. شما هم اگر خواستید برای یک فیلد یک سری اعداد رندم ایجاد کنید میتوانید از این روش استفاده کنید:
ABS(CHECKSUM(NewId())) % 360
این دستور اعداد رندمی بین ۰ تا ۳۵۹ تولید میکند و حتی در دستور Select هم به ازای هر رکورد یک مقدار متفاوت تولید میکند.
پر واضح است که عدد ۳۶۰ را باید متناسب با نیاز خود تغییر دهید. ;-)