Dynamiczna tablica w SQL Server 2000
Jarek-JT - 17-06-2007 00:15
Dynamiczna tablica w SQL Server 2000
Hej,
Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server 2000 czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania dowolnej ilo?ci rekordów, przeszukiwania). Do tej pory w swoim kawa?ku kodu SQLowego korzysta?em z normalnej tabeli (zaimplementowane jako procedura), jedak zosta?em zmuszony do przeniesienia procedury do funkcji, a w niej niestety nie mo?na tworzy?, ani korzysta? z tabel tymczasowych. Ma mo?e kto? na to jakie? rozwi?zanie?
Krzysztof Raczkowski - 17-06-2007 00:15
Jarek-JT pisze: > Hej, > > Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server 2000 > czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania dowolnej ilo?ci > rekordów, przeszukiwania). Do tej pory w swoim kawa?ku kodu SQLowego > korzysta?em z normalnej tabeli (zaimplementowane jako procedura), jedak > zosta?em zmuszony do przeniesienia procedury do funkcji, a w niej > niestety nie mo?na tworzy?, ani korzysta? z tabel tymczasowych. Ma mo?e > kto? na to jakie? rozwi?zanie?
Z tabel tymczasowych nie .. ale ze zmiennych tablicowych tak
-- Pozdrawiam K. Raczkowski
Jarek-JT - 17-06-2007 00:15
Krzysztof Raczkowski napisa?(a): > Jarek-JT pisze: >> Hej, >> >> Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server >> 2000 czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania dowolnej >> ilo?ci rekordów, przeszukiwania). Do tej pory w swoim kawa?ku kodu >> SQLowego korzysta?em z normalnej tabeli (zaimplementowane jako >> procedura), jedak zosta?em zmuszony do przeniesienia procedury do >> funkcji, a w niej niestety nie mo?na tworzy?, ani korzysta? z tabel >> tymczasowych. Ma mo?e kto? na to jakie? rozwi?zanie? > > Z tabel tymczasowych nie .. ale ze zmiennych tablicowych tak > > -- > Pozdrawiam > K. Raczkowski
Ale czy jest mo?liwo?? zadeklarowania dynamicznej zmiennej tablicowej? Bez podawania jej wielko?ci przy deklaracji i z mo?liwo?ci? dodawania kolejnych rekordów w trakcie potrzeby?
Marcin A. Guzowski - 17-06-2007 00:16
Jarek-JT wrote: > Krzysztof Raczkowski napisa?(a): >> Jarek-JT pisze: >>> Hej, >>> >>> Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server >>> 2000 czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania dowolnej >>> ilo?ci rekordów, przeszukiwania). Do tej pory w swoim kawa?ku kodu >>> SQLowego korzysta?em z normalnej tabeli (zaimplementowane jako >>> procedura), jedak zosta?em zmuszony do przeniesienia procedury do >>> funkcji, a w niej niestety nie mo?na tworzy?, ani korzysta? z tabel >>> tymczasowych. Ma mo?e kto? na to jakie? rozwi?zanie? >> >> Z tabel tymczasowych nie .. ale ze zmiennych tablicowych tak >> >> -- >> Pozdrawiam >> K. Raczkowski > > Ale czy jest mo?liwo?? zadeklarowania dynamicznej zmiennej tablicowej? > Bez podawania jej wielko?ci przy deklaracji i z mo?liwo?ci? dodawania > kolejnych rekordów w trakcie potrzeby?
Tak. Nazywa si? to zmienna tabelaryczna, a nie tablicowa. Zmienna tabelaryczna jest w rzeczywisto?ci tabel? tymczasow? w bazie tempdb zawsze o strukturze sterty (nie mo?na jej indeksowa?). Mo?na z nich korzysta? w funkcjach.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Krzysztof Raczkowski - 17-06-2007 00:16
Marcin A. Guzowski pisze: > Jarek-JT wrote: >> Krzysztof Raczkowski napisa?(a): >>> Jarek-JT pisze: >>>> Hej, >>>> >>>> Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server >>>> 2000 czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania >>>> dowolnej ilo?ci rekordów, przeszukiwania). Do tej pory w swoim >>>> kawa?ku kodu SQLowego korzysta?em z normalnej tabeli >>>> (zaimplementowane jako procedura), jedak zosta?em zmuszony do >>>> przeniesienia procedury do funkcji, a w niej niestety nie mo?na >>>> tworzy?, ani korzysta? z tabel tymczasowych. Ma mo?e kto? na to >>>> jakie? rozwi?zanie? >>> >>> Z tabel tymczasowych nie .. ale ze zmiennych tablicowych tak >>> >>> -- >>> Pozdrawiam >>> K. Raczkowski >> >> Ale czy jest mo?liwo?? zadeklarowania dynamicznej zmiennej tablicowej? >> Bez podawania jej wielko?ci przy deklaracji i z mo?liwo?ci? dodawania >> kolejnych rekordów w trakcie potrzeby? > > > Tak. Nazywa si? to zmienna tabelaryczna, a nie tablicowa. Zmienna > tabelaryczna jest w rzeczywisto?ci tabel? tymczasow? w bazie tempdb > zawsze o strukturze sterty (nie mo?na jej indeksowa?). Mo?na z nich > korzysta? w funkcjach. > >
A mo?esz poda? ?ród?a tych wiadomo?ci? Bo wsz?dzie gdzie ja czyta?em o zmienny (jak wolisz) tabelarycznych by?o napisane, ?e zmienne te nie maj? odzwierciedlenia w bazie tempdb, co przyczynia si? np. do zysku na operacjach I/O na dysku.
?eby nie by? go?os?ownym, przyk?ad: http://www.sql-server-performance.com/temp_tables.asp
-- Pozdrawiam K. Raczkowski
Maciej Pilecki - 17-06-2007 00:16
"Krzysztof Raczkowski" <raczkowk_pulapka@poczta.wp.pl> wrote in message news:f3cq6c$j2l$1@atlantis.news.tpi.pl... > Marcin A. Guzowski pisze: > > Jarek-JT wrote: > >> Krzysztof Raczkowski napisa?(a): > >>> Jarek-JT pisze: > >>>> Hej, > >>>> > >>>> Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server > >>>> 2000 czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania > >>>> dowolnej ilo?ci rekordów, przeszukiwania). Do tej pory w swoim > >>>> kawa?ku kodu SQLowego korzysta?em z normalnej tabeli > >>>> (zaimplementowane jako procedura), jedak zosta?em zmuszony do > >>>> przeniesienia procedury do funkcji, a w niej niestety nie mo?na > >>>> tworzy?, ani korzysta? z tabel tymczasowych. Ma mo?e kto? na to > >>>> jakie? rozwi?zanie? > >>> > >>> Z tabel tymczasowych nie .. ale ze zmiennych tablicowych tak > >>> > >>> -- > >>> Pozdrawiam > >>> K. Raczkowski > >> > >> Ale czy jest mo?liwo?? zadeklarowania dynamicznej zmiennej tablicowej? > >> Bez podawania jej wielko?ci przy deklaracji i z mo?liwo?ci? dodawania > >> kolejnych rekordów w trakcie potrzeby? > > > > > > Tak. Nazywa si? to zmienna tabelaryczna, a nie tablicowa. Zmienna > > tabelaryczna jest w rzeczywisto?ci tabel? tymczasow? w bazie tempdb > > zawsze o strukturze sterty (nie mo?na jej indeksowa?). Mo?na z nich > > korzysta? w funkcjach. > > > > > > A mo?esz poda? ?ród?a tych wiadomo?ci? Bo wsz?dzie gdzie ja czyta?em o > zmienny (jak wolisz) tabelarycznych by?o napisane, ?e zmienne te nie > maj? odzwierciedlenia w bazie tempdb, co przyczynia si? np. do zysku na > operacjach I/O na dysku. > > ?eby nie by? go?os?ownym, przyk?ad: > http://www.sql-server-performance.com/temp_tables.asp >
Nikt nikomu nie zabroni wypisywa? bzdur w sieci, a sql-server-performance.com jest znane z zamieszczania tekstów o w?tpliwej warto?ci merytorycznej. Zmienne tabelaryczne maj? sporo ró?nic w stosunku do tabel tymczasowych ale od lat ju? walcz? z mitem, jakoby istnia?y tylko w pami?ci. Mitem jest równie?, ?e zawsze s? szybsze/wydajniejsze od tabel tymczasowcyh (w wielu przypadkach s? du?o wolniejsze, bo nie ma dla nich statystyk i Query Optymizer wybiera bardzo nieefektywny plan zak?adaj?c, ?e zmienna trzyma tylko jeden wiersz, podczas gdy w rzeczywisto?ci trzyma np. 100 000). Na pocz?tek proponuj? ma?y eksperyment my?lowy: co si? stanie je?li do zmiennej tabelarycznej wstawi? milion rekordów po 2KB w ka?dym, czyli w sumie ok. 2GB danych, podczas gdy mój serwer ma tylko 1GB pami?ci? Po wykonaniu tego eksperymentu i samodzielnym wysnuciu wniosków, mo?na przej?? do dalszej cz??ci edukacji i poczyta? sobie ten artyku?, w szczególno?ci pytanie czwarte: http://support.microsoft.com/default.aspx/kb/305977
W tylko jednym si? nie zgodz? z Marcinem, mianowicie zmienna tabelaryczna nie musi mie? postaci sterty bo mo?na jej za?o?y? PK podczas deklaracji i wówczas ten PK b?dzie wymuszony unikatowym indeksem klastrowanym, wi?c nie b?dzie sterty. Mo?na równie? mie? inne indeksy UNIQUE, za?o?one w ten sam sposób, ale nie da si? explicite za?o?y? indeksu na takiej zmiennej.
Pozdrawiam, Maciej Pilecki SQL Server MVP
Marcin A. Guzowski - 17-06-2007 00:16
Maciej Pilecki wrote: > W tylko jednym si? nie zgodz? z Marcinem, mianowicie zmienna tabelaryczna > nie musi mie? postaci sterty bo mo?na jej za?o?y? PK podczas deklaracji i > wówczas ten PK b?dzie wymuszony unikatowym indeksem klastrowanym, wi?c nie > b?dzie sterty. Mo?na równie? mie? inne indeksy UNIQUE, za?o?one w ten sam > sposób, ale nie da si? explicite za?o?y? indeksu na takiej zmiennej.
A rzeczywi?cie, tego pochopnie nie wzi??em pod uwag?.
Co do samej w?tpliwo?ci dotycz?cej istnienia zmiennych tabelarycznych jako tabel w tempdb - zamiast wierzy? w - jak to Maciek okre?li? - teksty o w?tpliwej warto?ci merytorycznej, mo?na samemu sprawdzi? empirycznie, w najbardziej banalny sposób:
USE tempdb GO SELECT Count(*) as przed FROM sysobjects GO DECLARE @tab TABLE (a int) SELECT Count(*) as po FROM sysobjects GO
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Krzysztof Raczkowski - 17-06-2007 00:16
Maciej Pilecki pisze: > "Krzysztof Raczkowski" <raczkowk_pulapka@poczta.wp.pl> wrote in message > news:f3cq6c$j2l$1@atlantis.news.tpi.pl... >> Marcin A. Guzowski pisze: >>> Jarek-JT wrote: >>>> Krzysztof Raczkowski napisa?(a): >>>>> Jarek-JT pisze: >>>>>> Hej, >>>>>> >>>>>> Mam pytanie czy jest mo?liwosc wykorzystania w funkcji w SQL Server >>>>>> 2000 czego? ala tablica dynamiczna (z mo?liwo?ci? dodoawania >>>>>> dowolnej ilo?ci rekordów, przeszukiwania). Do tej pory w swoim >>>>>> kawa?ku kodu SQLowego korzysta?em z normalnej tabeli >>>>>> (zaimplementowane jako procedura), jedak zosta?em zmuszony do >>>>>> przeniesienia procedury do funkcji, a w niej niestety nie mo?na >>>>>> tworzy?, ani korzysta? z tabel tymczasowych. Ma mo?e kto? na to >>>>>> jakie? rozwi?zanie? >>>>> Z tabel tymczasowych nie .. ale ze zmiennych tablicowych tak >>>>> >>>>> -- >>>>> Pozdrawiam >>>>> K. Raczkowski >>>> Ale czy jest mo?liwo?? zadeklarowania dynamicznej zmiennej tablicowej? >>>> Bez podawania jej wielko?ci przy deklaracji i z mo?liwo?ci? dodawania >>>> kolejnych rekordów w trakcie potrzeby? >>> >>> Tak. Nazywa si? to zmienna tabelaryczna, a nie tablicowa. Zmienna >>> tabelaryczna jest w rzeczywisto?ci tabel? tymczasow? w bazie tempdb >>> zawsze o strukturze sterty (nie mo?na jej indeksowa?). Mo?na z nich >>> korzysta? w funkcjach. >>> >>> >> A mo?esz poda? ?ród?a tych wiadomo?ci? Bo wsz?dzie gdzie ja czyta?em o >> zmienny (jak wolisz) tabelarycznych by?o napisane, ?e zmienne te nie >> maj? odzwierciedlenia w bazie tempdb, co przyczynia si? np. do zysku na >> operacjach I/O na dysku. >> >> ?eby nie by? go?os?ownym, przyk?ad: >> http://www.sql-server-performance.com/temp_tables.asp >> > > Nikt nikomu nie zabroni wypisywa? bzdur w sieci, a > sql-server-performance.com jest znane z zamieszczania tekstów o w?tpliwej > warto?ci merytorycznej.
Ech ... a najlepsze jest to ?e wchodzi si? na t? stron? jednym klikiem z BOL do??czonego do MSSQL 2005 ...
> Zmienne tabelaryczne maj? sporo ró?nic w stosunku do tabel tymczasowych ale > od lat ju? walcz? z mitem, jakoby istnia?y tylko w pami?ci. > Mitem jest równie?, ?e zawsze s? szybsze/wydajniejsze od tabel tymczasowcyh > (w wielu przypadkach s? du?o wolniejsze, bo nie ma dla nich statystyk i > Query Optymizer wybiera bardzo nieefektywny plan zak?adaj?c, ?e zmienna > trzyma tylko jeden wiersz, podczas gdy w rzeczywisto?ci trzyma np. 100 000). > Na pocz?tek proponuj? ma?y eksperyment my?lowy: co si? stanie je?li do > zmiennej tabelarycznej wstawi? milion rekordów po 2KB w ka?dym, czyli w > sumie ok. 2GB danych, podczas gdy mój serwer ma tylko 1GB pami?ci?
Nigdy nie zak?ada?em upychania tam (@) du?ej ilo?ci rekordów :) - to jest (by?o oczywiste)
> Po wykonaniu tego eksperymentu i samodzielnym wysnuciu wniosków, mo?na > przej?? do dalszej cz??ci edukacji i poczyta? sobie ten artyku?, w > szczególno?ci pytanie czwarte: > http://support.microsoft.com/default.aspx/kb/305977 > > W tylko jednym si? nie zgodz? z Marcinem, mianowicie zmienna tabelaryczna > nie musi mie? postaci sterty bo mo?na jej za?o?y? PK podczas deklaracji i > wówczas ten PK b?dzie wymuszony unikatowym indeksem klastrowanym, wi?c nie > b?dzie sterty. Mo?na równie? mie? inne indeksy UNIQUE, za?o?one w ten sam > sposób, ale nie da si? explicite za?o?y? indeksu na takiej zmiennej. >
Ten artyku? te? jest ciekawy ... http://www.microsoft.com/technet/pro...ithtempdb.mspx
Dzi?kuj? za sprostowania :)
-- Pozdrawiam K. Raczkowski
Jarek-JT - 17-06-2007 00:17
> DECLARE @tab TABLE (a int)
Dziala tak jak chcialem - nawet w funkcjach. Dziekuje bardzo :)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
[oracle] - Oracle SQL Developer - co to jest SID?
zanotowane.pldoc.pisz.plpdf.pisz.plautwywalczyl.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|