انتشار داده های آزمایشی
  برای اهداف testing و tuning نیاز به داده های آزمایشی وجود دارد.
   SQL Server
   ۱۲۳۹۶
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۸۹/۲/۱۶
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

گاهی اوقات برای مقاصد مختلف نیاز داریم تا داده های زیاد و متنوعی را بسرعت تولید و داخل جدول یا جداولی انتشار دهیم. بطور مثال برای تست کردن عملکرد Query ها روی داده های بسیار زیاد به این مبحث احتیاج می شود.

ابتدا برای آشنایی شما، توابع و عملگر هایی را که بعدا بیشتر از آنها استفاده خواهیم کرد را معرفی می کنم.

تابع ABS: این تابع قدر مطلق عبارت عددی را بر میگرداند.

تابع NEWID: این تابع یک مقدار منحصر بفرد از نوع Uniqueidentifier را بر می گرداند.

تابع CHECKSUM: در اینجا برای تبدیل کردن مقدار برگشتی توسط تابع NEWID به یک عدد از آن استفاده می شود.

تابع RAND: این تابع یک عدد تصادفی بین 0 و 1 را تولید می کند.

عملگر %: باقیمانده ی تقسیم دو عدد را بدست می آورد.

به مثال زیر توجه کنید:

SELECT integer_data1 = n
       ,integer_data2 = ABS(CHECKSUM(NEWID())) % 1000 + 1 -- 1..1000
       , float_data = ABS(CHECKSUM(NEWID())) * RAND() / 100000        
       , varchar_data1 = CAST(SUBSTRING(REPLACE(CAST(NEWID() AS VARCHAR(36)),'-',''), 1, n % 15 + 1) AS VARCHAR(15))
       , varchar_data2 = 'C' + RIGHT('0000000000' + CAST(n AS VARCHAR(10)), 10)
       , date_data = CONVERT(VARCHARDATEADD(DAY,0,ABS(CHECKSUM(NEWID()))%100000), 103)
FROM (SELECT TOP 50 CAST(ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS INTEGER) 
        FROM sys.objects)D(n)

نتیجه ی query فوق به این شکل خواهد بود:
(البته بدیهی است که ممکن است داده هایی که در کامپیوتر شما تولید شده باشند با داده های نمایش داده شده در اینجا متفاوت باشد)

integer_data1 integer_data2 float_data             varchar_data1   varchar_data2 date_data
------------- ------------- ---------------------- --------------- ------------- ------------------------------
1             905           4781.5968033019        A3              C0000000001   26/07/2019
2             440           1041.29205657079       EFC             C0000000002   03/08/2003
3             99            5890.44495885498       6536            C0000000003   02/08/2162
4             200           3234.24619479581       A2E5F           C0000000004   27/06/2137
5             307           2691.89975734681       767534          C0000000005   26/04/2070
6             37            239.217083631838       8188495         C0000000006   10/01/2027
7             296           1746.06421409639       B4EB9B88        C0000000007   23/09/1952
8             67            2717.77451754648       F93E8084E       C0000000008   18/09/2074
9             973           2341.06628475702       775E713575      C0000000009   27/09/2006
10            303           9822.85343351162       915056F6B28     C0000000010   31/12/2165
11            625           8178.16302882626       443736ADA270    C0000000011   15/11/2101
12            119           7930.64799362036       F1306EAF41664   C0000000012   07/02/2061
13            991           8097.56541526918       0513A180CCF94D  C0000000013   11/09/2164
14            366           6636.48833753526       F995C2B4E912490 C0000000014   05/04/1901
15            898           5368.48950094824       E               C0000000015   18/04/1901
16            549           3520.77268355552       16              C0000000016   21/10/2011
17            317           3670.28857700447       C56             C0000000017   22/06/1936
18            486           6980.46586561895       9600            C0000000018   21/12/2002
19            135           212.80750778217        5C753           C0000000019   05/07/2109
20            1             186.003722570918       89E083          C0000000020   04/06/2115
21            856           7489.54544729564       6880BF0         C0000000021   27/05/1908
22            11            4868.91632009647       08023B59        C0000000022   13/01/2047
23            598           7360.02209365187       5179A5D5C       C0000000023   03/10/2000
24            293           8594.0593870433        659B2E4343      C0000000024   15/05/2036
25            33            553.719040875015       8F23E28CC9B     C0000000025   30/01/1973
26            129           8356.03073542198       1E751CF9C46D    C0000000026   10/08/2044
27            375           950.960054833036       28FCA385AEA04   C0000000027   06/09/2105
28            321           8783.64480885671       3A696E5D0F4643  C0000000028   13/10/2017
29            262           887.965589358726       0001BCF1FEC24AB C0000000029   04/01/1960
30            961           793.191105020171       E               C0000000030   14/09/1936
31            979           5780.05572898741       C9              C0000000031   11/09/1953
32            756           9712.20002463215       F70             C0000000032   08/05/2021
33            148           4311.90621518022       FC81            C0000000033   28/10/1978
34            726           1799.24048699775       0A774           C0000000034   09/07/2029
35            557           4034.20098851739       8B7720          C0000000035   28/10/2095
36            630           1393.37277553063       B04385B         C0000000036   05/11/2120
37            866           6284.02371433383       852F28BC        C0000000037   23/10/2079
38            344           6140.49112203955       C2EC263BF       C0000000038   04/04/2051
39            146           3883.6839155397        AD86888FCE      C0000000039   30/03/2085
40            23            8212.92780639783       392E623806C     C0000000040   15/01/2102
41            740           1124.46551588371       E72CA15B4BC8    C0000000041   10/04/2168
42            558           5461.92741075602       14E332B8C6BE4   C0000000042   09/02/1941
43            282           9964.38751891156       AEF628ADD8174D  C0000000043   11/02/2126
44            915           5406.7114244882        3BBD942F0383450 C0000000044   01/04/2034
45            651           8063.91780235582       B               C0000000045   02/12/2040
46            837           5099.78704096977       E3              C0000000046   25/01/2155
47            675           7933.44651775082       B14             C0000000047   01/03/2138
48            782           4164.22453503599       A30E            C0000000048   30/08/2145
49            282           9082.99733385967       00A6D           C0000000049   25/12/1934
50            176           8386.0408324166        2702A2          C0000000050   05/06/2129

(50 row(s) affected)

مراجع

Madhivanan (SQL Server MVP)

Inside MS SQL Server T-SQL: Querying By Itzik ben Gan