Mariusz Adamski

Mariusz Adamski Business
Intelligence

Temat: Wersjonowanie w obrębie kolumny z identycznymi danymi

Może ktoś z Was ma takowe rozwiązania albo wie jak to sprytnie zaimplementować (SQLS 2008 R2) coś takiego:
Załóżmy, że mam sobie zamówienie o numerze X, do tego zgłoszenia mogę mieć N pozycji. Wrzucając dane do bazy potrzebuję wersjonowania w obrębie danego zgłoszenia, czyli pojawia mi się np. zgłoszenie numer 111 i pierwsza pozycja do niego - wówczas numer wersji jest 1. Za jakiś czas pojawia się kolejna pozycja do tego samego zgłoszenia - wówczas już powinna dostać numer wersji 2. Trzecia - numer wersji 3. Założmy teraz, że coś się zmieniło w pierwszej pozycji (do tej pory miała numer wersji =1). Robiąc update numer wersji powinien zmienić się na 4. Analogicznie do innego numeru zgłoszenia - numeracja wersji oddzielna w obrębie zgłoszenia. Obrazowo chodzi o coś takiego

zgl poz nr_wer
111 1 1
111 2 2
111 3 3

Update na pozycji 1 daje:

zgl poz nr_wer
111 1 4
111 2 2
111 3 3

Insert nowego zgloszenia
zgl poz nr_wer
111 1 4
111 2 2
111 3 3
112 1 1

Czy ktoś z Was orientuje się czy w SQL są jakieś funkcje lub inne tricki, które wspomagałyby takie niczym "wersjonowanie" w obrębie jakiejś kolumny?
A może jakiś inne sprytne rozwiązanie?? Podejrzewam, że można by to jakoś ogarnąć w SSIS w Script Component, ale tu wchodzi w grę znajomość np. C#.

Wielkie dzięki za wszelkie uwagi/ pomysły
Krzysztof Stachyra

Krzysztof Stachyra Szef Wydziału
Produkcji Systemów
Handlowo-Magazynowyc
h i ...

Temat: Wersjonowanie w obrębie kolumny z identycznymi danymi

możesz próbować kombinować np z poleceniem MERGE i odpowiednim warunkiem, że jeśli już coś takiego istnieje to kasujesz starą wersję i wstawiasz z nową czyli select max(id) + 1 from x where zam=111 . Jak nie to zostaje Ci albo jakiś trigger albo odpowiednio przygotowana procedura, która będzie to badać przy insertach.
Adam O.

Adam O. Bazy danych etc

Temat: Wersjonowanie w obrębie kolumny z identycznymi danymi

Ogólna koncepcja:

create table zgloszenie_base
(
zgl int,
poz int,
wer timestamp
)

create view zgloszenie
as
(
select zgl, poz, (row_number() over (partition by zgl order by wer)) as nr_wer
from zgloszenie_base
)

Ale szybkie to to nie będzie.Adam O. edytował(a) ten post dnia 15.03.11 o godzinie 12:39

Następna dyskusja:

analysis services: dodawani...




Wyślij zaproszenie do