ďťż
 
[mssql] dynamiczna nazwa tabeli ďťż
 
[mssql] dynamiczna nazwa tabeli
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[mssql] dynamiczna nazwa tabeli



Art - 24-12-2006 00:37
[mssql] dynamiczna nazwa tabeli
  Witam..
W bazie mam tabele zawierające jakieś zdarzenia z każdego dnia - każdy dzień
jedna tabela..
chciałbym sobie zrobić zapytanie które byłoby w stylu
select * from dzisiaj itd..

Teraz radzę sobie w ten sposób:

declare @sql nvarchar(3000)
set @sql = N''
set @sql = @sql + N' SELECT * from FROM historia_'
set @sql = @sql + substring(convert(varchar,getdate(),120), 1, 4)
set @sql = @sql + N'_'
set @sql = @sql + substring(convert(varchar,getdate(),120), 6, 2)
set @sql = @sql + N'_'
set @sql = @sql + substring(convert(varchar,getdate(),120), 9, 2)
exec sp_executesql @sql

to działa jednak jak warunków po where trochę wchodzi to jest to
niewygodne..
i pytanie:

Czy da się zrobić jakiś view czy coś innego żeby zapytanie tak żeby zamiast
formy drugiej dało się zastosować formę pierwszą..
Pozdrawiam
Artur Starz





sg - 24-12-2006 00:37

  Art napisał(a):
> Witam..
> W bazie mam tabele zawierające jakieś zdarzenia z każdego dnia - każdy dzień
> jedna tabela..
> chciałbym sobie zrobić zapytanie które byłoby w stylu
> select * from dzisiaj itd..
>
> Teraz radzę sobie w ten sposób:
>
> declare @sql nvarchar(3000)
> set @sql = N''
> set @sql = @sql + N' SELECT * from FROM historia_'
> set @sql = @sql + substring(convert(varchar,getdate(),120), 1, 4)
> set @sql = @sql + N'_'
> set @sql = @sql + substring(convert(varchar,getdate(),120), 6, 2)
> set @sql = @sql + N'_'
> set @sql = @sql + substring(convert(varchar,getdate(),120), 9, 2)
> exec sp_executesql @sql
>
>
> to działa jednak jak warunków po where trochę wchodzi to jest to
> niewygodne..
> i pytanie:
>
> Czy da się zrobić jakiś view czy coś innego żeby zapytanie tak żeby zamiast
> formy drugiej dało się zastosować formę pierwszą..
> Pozdrawiam
> Artur Starz
>
>

oczywiście, trzymaj wszystkie informacje w jednej tabeli

--
Na wszystko skutecznie pomaga woda.
Dwie, trzy krople na szklankę wódki




Art - 24-12-2006 00:37

  >> W bazie mam tabele zawierające jakieś zdarzenia z każdego dnia -
>> każdy dzień jedna tabela..
>> chciałbym sobie zrobić zapytanie które byłoby w stylu
>> select * from dzisiaj itd..
>>
>> Teraz radzę sobie w ten sposób:
>>
>> declare @sql nvarchar(3000)
>> set @sql = N''
>> set @sql = @sql + N' SELECT * from FROM historia_'
>> set @sql = @sql + substring(convert(varchar,getdate(),120), 1, 4)
>> set @sql = @sql + N'_'
>> set @sql = @sql + substring(convert(varchar,getdate(),120), 6, 2)
>> set @sql = @sql + N'_'
>> set @sql = @sql + substring(convert(varchar,getdate(),120), 9, 2)
>> exec sp_executesql @sql
>>
>>
>> to działa jednak jak warunków po where trochę wchodzi to jest to
>> niewygodne..
>> i pytanie:
>>
>> Czy da się zrobić jakiś view czy coś innego żeby zapytanie tak żeby
>> zamiast formy drugiej dało się zastosować formę pierwszą..
>> Pozdrawiam
>> Artur Starz
>>
>>
>
> oczywiście, trzymaj wszystkie informacje w jednej tabeli

Jakbym tak mógł to by nie było problemu ale:
1. Nie ja jestem autorem głównej aplikacji dopisującej dane, ja korzystam z
danych
2. Szybkość przeszukiania bardzo by spadła - danych jest około 90-100
tysięcy dziennie, rocznie to ponad 20 mln rekordów a baza z 2 lat zajmuje
kilkadziesiąt Gb więc ze względu na zasoby sprzętowe serwera (pamięć)
łatwiej korzystać z większej ilości tabel -korzystanie z danych
wcześniejszych jest dużo żadsze niż z ostatniego powiedzmy dnia, 3 dni i
tygdnia, maksymalnie miesiąc a potem sporadycznie.
więc nie bardzo mogę zastosować się do Twojej rady - czy Ktoś ma jeszcze
jakieś pomysły?

Pozdr
Artur




sg - 24-12-2006 00:37

  Art napisał(a):
>>> W bazie mam tabele zawierające jakieś zdarzenia z każdego dnia -
>>> każdy dzień jedna tabela..
>>> chciałbym sobie zrobić zapytanie które byłoby w stylu
>>> select * from dzisiaj itd..
>>>
>>> Teraz radzę sobie w ten sposób:
>>>
>>> declare @sql nvarchar(3000)
>>> set @sql = N''
>>> set @sql = @sql + N' SELECT * from FROM historia_'
>>> set @sql = @sql + substring(convert(varchar,getdate(),120), 1, 4)
>>> set @sql = @sql + N'_'
>>> set @sql = @sql + substring(convert(varchar,getdate(),120), 6, 2)
>>> set @sql = @sql + N'_'
>>> set @sql = @sql + substring(convert(varchar,getdate(),120), 9, 2)
>>> exec sp_executesql @sql
>>>
>>>
>>> to działa jednak jak warunków po where trochę wchodzi to jest to
>>> niewygodne..
>>> i pytanie:
>>>
>>> Czy da się zrobić jakiś view czy coś innego żeby zapytanie tak żeby
>>> zamiast formy drugiej dało się zastosować formę pierwszą..
>>> Pozdrawiam
>>> Artur Starz
>>>
>>>
>> oczywiście, trzymaj wszystkie informacje w jednej tabeli
>
> Jakbym tak mógł to by nie było problemu ale:
> 1. Nie ja jestem autorem głównej aplikacji dopisującej dane, ja korzystam z
> danych

to niewiele poradzisz

> 2. Szybkość przeszukiania bardzo by spadła - danych jest około 90-100
> tysięcy dziennie, rocznie to ponad 20 mln rekordów a baza z 2 lat zajmuje
> kilkadziesiąt Gb więc ze względu na zasoby sprzętowe serwera (pamięć)
> łatwiej korzystać z większej ilości tabel -korzystanie z danych
> wcześniejszych jest dużo żadsze niż z ostatniego powiedzmy dnia, 3 dni i
> tygdnia, maksymalnie miesiąc a potem sporadycznie.
> więc nie bardzo mogę zastosować się do Twojej rady - czy Ktośma jeszcze
> jakieś pomysły?
>
> Pozdr
> Artur
>
>

nie, szybkość wcale nie musi spaść, wystarczy zrobić odpowiednie indeksy

--
Na wszystko skutecznie pomaga woda.
Dwie, trzy krople na szklankę wódki





Art - 24-12-2006 00:37

  [ciach]

> to niewiele poradzisz

tego się właśnie obawiałem :-(
>
>> 2. Szybkość przeszukiania bardzo by spadła - danych jest około 90-100
>> tysięcy dziennie, rocznie to ponad 20 mln rekordów a baza z 2 lat
>> zajmuje kilkadziesiąt Gb więc ze względu na zasoby sprzętowe serwera
>> (pamięć) łatwiej korzystać z większej ilości tabel -korzystanie z
>> danych wcześniejszych jest dużo żadsze niż z ostatniego powiedzmy
>> dnia, 3 dni i tygdnia, maksymalnie miesiąc a potem sporadycznie.
>> więc nie bardzo mogę zastosować się do Twojej rady - czy Ktoś ma
>> jeszcze jakieś pomysły?
>>
>> Pozdr
>> Artur
>>
>>
>
> nie, szybkość wcale nie musi spaść, wystarczy zrobić odpowiednie
> indeksy

Może i tak, ale e względu na p.1 (nie ja jestem autorem głównego programu)
odpada

Pozdrawiam
Artur




Marcin A. Guzowski - 24-12-2006 00:37

  Art napisał(a):
> Czy da się zrobić jakiś view czy coś innego żeby zapytanie tak żeby zamiast
> formy drugiej dało się zastosować formę pierwszą..

Od dynamicznego sqla nie uciekniesz.

Można oczywiście kombinować i np. stworzyć sobie widok 'dzisiaj',
którego definicja będzie przez ALTER zmieniana każdego dnia przez
fragment dynamicznego sqla w jobie. Przy założeniu, że job się
wykonał: SELECT * FROM dzisiaj
zawsze zwróci dane z aktualnej tabeli.

Tak czy inaczej jest to rzeźba. Prawo propagacji rzeźby mówi, że jedna
rzeźba (u Ciebie kwestia tworzenia oddzielnych tabel dla każdego dnia)
szybko generuje potrzebę tworzenia nowej rzeźby, aby osiągnąć
standardową funkcjonalność (spójny odczyt danych).

Poziome partycjonowanie tabel jest co prawda jednym ze środków
optymalizacyjnych, jednak nie osiąga się tego w taki sposób.

--
Pozdrawiam,
Marcin Guzowski
http://guzowski.info
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= [MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?= MSSQL Express czy Oracle Express MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= [MSSQL 2000] =?ISO-8859-2?Q?wywo=B3anie_procesu_z_poziomu_?==?ISO-8859-2?Q?job=27a?= [MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?= Pobierananie danych z innej bazy danych w MSSQL Migracja MSSQL 2005 CTP na 2005 Express
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wawa19wwa91.pev.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com