The Gurus Guide to SQL Server Stored Procedures, XML, and HTML [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

The Gurus Guide to SQL Server Stored Procedures, XML, and HTML [Electronic resources] - نسخه متنی

Ken Henderson

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید









Multidimensional Arrays



Because array elements can store nearly any type of data, they can also store handles to other arrays. This means that you can easily set up multidimensional arrays and that these arrays can be of either the jagged or the smooth variety. Here's an example:



DECLARE @yhdl int, @xhdl int, @xsiz int, @ysiz int, @res int,
@xcnt int, @ycnt int
SELECT @ysiz=20, @xsiz=10
-- Allocate the y dimension
SET @yhdl=fn_createarray(@ysiz)
-- Allocate and fill each row
SET @ycnt=1
WHILE @ycnt<=@ysiz BEGIN
SET @xhdl=fn_createarray(@xsiz)
SET @res=fn_setarray(@yhdl,@ycnt,@xhdl)
SET @xcnt=1
WHILE @xcnt<=@xsiz BEGIN
SET @res=fn_setarray(@xhdl,@xcnt,RAND()*100)
SET @xcnt=@xcnt+1
END
SET @ycnt=@ycnt+1
END
-- List each row
SET @ycnt=1
WHILE @ycnt<=@ysiz BEGIN
PRINT 'Listing row: '+CAST(@ycnt AS varchar)
SET @xhdl=CAST(fn_getarray(@yhdl,@ycnt) AS int)
SELECT * FROM ::fn_listarray(@xhdl)
SET @ycnt=@ycnt+1
END
-- Get a value using x-,y-coordinates
SELECT fn_getarray(CAST(fn_getarray
(@yhdl,16) AS int),9) AS 'Element at
[9,16]'
-- Deallocate each row
SET @ycnt=1
WHILE @ycnt<=@ysiz BEGIN
SET @xhdl=CAST(fn_getarray(@yhdl,@ycnt) AS int)
SET @res=fn_destroyarray(@xhdl)
SET @ycnt=@ycnt+1
END
-- Deallocate the y dimension
SET @res=fn_destroyarray(@yhdl)


(Results)



Listing row: 1
idx value
----------- ------------------------
28.7541
2 89.3502
3 3.53946
4 23.5332
5 86.0147
6 65.5272
7 55.1878
8 28.106
9 54.9643
10 45.7077
Listing row: 2
idx value
----------- ----------------
62.1757
2 88.8092
3 83.9364
4 48.1814
5 46.8372
6 11.51
7 66.9179
8 51.3207
9 87.2797
10 3.83372
Listing row: 3
idx value
----------- ----------------
60.2789
2 4.09385
3 37.9455
4 2.57299
5 52.0562
6 70.8885
7 47.8154
8 54.1449
9 59.3168
10 87.9367
Listing row: 4
idx value
----------- --------------------
24.996
2 94.1695
3 99.9406
4 18.491
5 87.2228
6 30.5012
7 21.4947
8 68.7588
9 78.544
10 80.717
...
Listing row: 16
idx value
----------- ------------------
72.5644
2 11.6483
3 98.446
4 63.0639
5 64.6387
6 71.462
7 18.1232
8 69.4337
9 14.1641
10 12.0571
Listing row: 17
idx value
----------- ------------------
12.8128
2 49.1211
3 44.5183
4 97.7341
5 79.8344
6 94.7446
7 93.0003
8 63.0217
9 31.3682
10 41.8146
Listing row: 18
idx value
----------- -----------------
33.1187
2 23.9623
3 22.8832
4 15.6967
5 88.0725
6 31.4168
7 71.7862
8 99.8463
9 70.8513
10 99.2734
Listing row: 19
idx value
----------- ---------------
66.302
2 26.2505
3 30.7053
4 16.8188
5 25.4275
6 46.9594
7 39.897
8 36.4633
9 18.7707
10 15.3608
Listing row: 20
idx value
----------- ------------------
57.3852
2 70.897
3 4.85462
4 17.4024
5 28.5141
6 92.8508
7 19.5683
8 50.7395
9 89.062
10 94.2366
Element at [9,16]
-----------------------------
14.1641


In this example, we allocate the y dimension of a two-dimensional array up front, then enter a loop in which we allocate each row separately. We fill each row with a series of random floating point values, although we could just as well have stored practically any series of values, including those from tables, as we've seen.


We store the array handle from each row allocation as an element in the y array. This allows us to then loop through the y dimension and list each row. It also allows us to access an element using x-,y-coordinates. Because SQL Server doesn't allow us to implicitly cast a sql_variant as an integer, we have to do so explicitly using CAST(), but this is a minor inconvenience.


It should be obvious by now that you can have as many array dimensions as you want, and that these dimensions can be either jagged (varying numbers of elements) or smooth.


/ 223