MSSQL Inkrementacja
Wlodzimierz - 02-07-2007 00:00
MSSQL Inkrementacja
Witam,
czy wie ktoś jak na sql server 2005 zaimplementować takie rozwiązanie: Załóżmy że mamy dwie tabele. Źródłowa i docelowa. W źródłowej znajdują się rekordy z datami. Insertem wrzucamy co jakiś czas porcję rekordów z tabeli źródłowej do docelowej posortowane wg. daty. Tabela docelowa ma dodatkowe pole (załóżmy że nazywa się Lp., typu smallint). Podczas wstawiania rekordów do docelowej tabelki, pole to ma się inkrementować o 1, jednak w momencie gdy do tabeli zostanie wstawiony rekord z nową wartością roku (np leciały rekordy z rokiem 2006, zaczynają pojawiać się z roiem 2007), wówczas Lp. znów zaczyna się inkrementować od jedynki. I tak za każdym kolejnym rokiem. Macie jakiś pomysł jak to zaimplementować? Z góry dzięki za wszelkie porady.
Grzegorz Danowski - 03-07-2007 00:04
"Wlodzimierz" <nie@ma.com> wrote in message news:f68onf$lci$1@news.task.gda.pl... > Tabela docelowa ma dodatkowe pole (załóżmy że nazywa się Lp., typu > smallint). Podczas wstawiania rekordów do docelowej tabelki, pole to ma > się inkrementować o 1, jednak w momencie gdy do tabeli zostanie wstawiony > rekord z nową wartością roku (np leciały rekordy z rokiem 2006, zaczynają > pojawiać się z roiem 2007), wówczas Lp. znów zaczyna się inkrementować od > jedynki. I tak za każdym kolejnym rokiem. Macie jakiś pomysł jak to > zaimplementować? Z góry dzięki za wszelkie porady.
Ja bym użył triggera typu Instead Of uruchamianego przed insertem. http://www.google.pl/search?hl=pl&q=...+server%22&lr= Jeśli rekordów w tabeli jest dużo, to dodałbym dodatkową tabelę zawierającą aktualną wartość numeru (rok i numer), co przyspieszyłoby pracę. -- Pozdrawiam Grzegorz
=?ISO-8859-2?Q?Tomasz_=A3ukaszyk?= - 03-07-2007 00:04
Wlodzimierz napisał(a): > Witam, > > czy wie ktoś jak na sql server 2005 zaimplementować takie rozwiązanie: > Załóżmy że mamy dwie tabele. Źródłowa i docelowa. W źródłowej znajdują się > rekordy z datami. Insertem wrzucamy co jakiś czas porcję rekordów z tabeli > źródłowej do docelowej posortowane wg. daty. > Tabela docelowa ma dodatkowe pole (załóżmy że nazywa się Lp., typu > smallint). Podczas wstawiania rekordów do docelowej tabelki, pole to ma się > inkrementować o 1, jednak w momencie gdy do tabeli zostanie wstawiony rekord > z nową wartością roku (np leciały rekordy z rokiem 2006, zaczynają pojawiać > się z roiem 2007), wówczas Lp. znów zaczyna się inkrementować od jedynki. I > tak za każdym kolejnym rokiem. Macie jakiś pomysł jak to zaimplementować? Z > góry dzięki za wszelkie porady. > > CREATE TABLE #r2006 ( nr numeric identity not null, data datetime null)
CREATE TABLE #r2007 ( nr numeric identity not null, data datetime null)
A potem już tylko inserty.
brejk - 14-07-2007 00:02
On 1 Lip, 19:36, "Wlodzimierz" <n...@ma.com> wrote: > Witam, > > czy wie ktoś jak na sql server 2005 zaimplementować takie rozwiązanie: > Załóżmy że mamy dwie tabele. Źródłowa i docelowa. W źródłowej znajdują się > rekordy z datami. Insertem wrzucamy co jakiś czas porcję rekordów ztabeli > źródłowej do docelowej posortowane wg. daty. > Tabela docelowa ma dodatkowe pole (załóżmy że nazywa się Lp., typu > smallint). Podczas wstawiania rekordów do docelowej tabelki, pole to masię > inkrementować o 1, jednak w momencie gdy do tabeli zostanie wstawiony rekord > z nową wartością roku (np leciały rekordy z rokiem 2006, zaczynają pojawiać > się z roiem 2007), wówczas Lp. znów zaczyna się inkrementować od jedynki. I > tak za każdym kolejnym rokiem. Macie jakiś pomysł jak to zaimplementować? Z > góry dzięki za wszelkie porady.
INSERT INTO dbo.TabelaDocelowa(..., Lp) SELECT ..., ROW_NUMBER() OVER (PARTITION BY YEAR(Data) ORDER BY Data) FROM dbo.TabelaZrodlowa
Pozdrawiam Paweł Potasiński
brejk - 14-07-2007 00:02
On 1 Lip, 19:36, "Wlodzimierz" <n...@ma.com> wrote: > Witam, > > czy wie ktoś jak na sql server 2005 zaimplementować takie rozwiązanie: > Załóżmy że mamy dwie tabele. Źródłowa i docelowa. W źródłowej znajdują się > rekordy z datami. Insertem wrzucamy co jakiś czas porcję rekordów ztabeli > źródłowej do docelowej posortowane wg. daty. > Tabela docelowa ma dodatkowe pole (załóżmy że nazywa się Lp., typu > smallint). Podczas wstawiania rekordów do docelowej tabelki, pole to masię > inkrementować o 1, jednak w momencie gdy do tabeli zostanie wstawiony rekord > z nową wartością roku (np leciały rekordy z rokiem 2006, zaczynają pojawiać > się z roiem 2007), wówczas Lp. znów zaczyna się inkrementować od jedynki. I > tak za każdym kolejnym rokiem. Macie jakiś pomysł jak to zaimplementować? Z > góry dzięki za wszelkie porady.
INSERT INTO dbo.TabelaDocelowa(..., Lp) SELECT ..., ROW_NUMBER() OVER (PARTITION BY YEAR(Data) ORDER BY Data) FROM dbo.TabelaZrodlowa
Pozdrawiam Paweł Potasiński
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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.pldoc.pisz.plpdf.pisz.plmelooonka.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 |
|