محتویات سایت
        برچسب های محبوب 








 
   انتشار داده های آزمایشی
  برای اهداف 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