گاهی اوقات برای مقاصد مختلف نیاز داریم تا داده های زیاد و متنوعی را بسرعت تولید و داخل جدول یا جداولی انتشار دهیم. بطور مثال برای تست کردن عملکرد 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(VARCHAR, DATEADD(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