Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

Konkurs - przywrócenie pierwotnej kolejności kolumn tabeli

Zgodnie z obietnicą ogłaszam konkurs zapowiedziany na wczorajszej sesji PLSSUG. Zadanie polega na przywróceniu pierwotnej kolejności kolumn tabeli po usunięciu i ponownym odtworzeniu kolumny wyliczanej. Np. mamy tabelę:

 

create table dbo.Osoby (
id int,
Imie varchar(50) NOT NULL,
Nazwisko varchar(100) NOT NULL,
NazwaPelna as Imie+' '+Nazwisko,
TelefonDoPracy varchar(30) NULL,
TelefonDomowy varchar(30) NULL,
TelefonKom varchar(30) NULL,
Telefony as  ISNULL(TelefonDoPracy+';','')+ISNULL(TelefonDomowy+';','')+ISNULL(TelefonKom+';',''),
EMail varchar(100),
DataRejestracji datetime
)

 

Po usunięciu i ponownym odtworzeniu kolumn NazwaPelna i Telefony, znajdą się one na końcu listy kolumn tabeli. Słabo napisane aplikacje mogą tej zmiany nie wytrzymać. Dlatego będziemy chcieli przywrócić kolejność pierwotną.

W czasie sesji pokazałem, jak wygenerować skrypty, które dla dowolnej tabeli:

1. Zapisze definicję wszystkich kolumn wyliczanych wraz z pierwotną kolejnością do tabeli
2. Usunie wszystkie kolumny wyliczane 
3. Odtworzy kolumny wyliczane (lądują na końcu listy)

Definicja tabeli jest w skrypcie recollate.sql umieszczonych w zasobach PLSSUG. Dla wygody zacytuję ją ponownie tutaj.

create table dbo.temp_ComputedCols (
    TableName sysname,
    ColumnName sysname,
    definition nvarchar(max),
    position int,
    PRIMARY KEY (TableName, ColumnName)
    )

Zadanie konkursowe polega na tym, żeby na podstawie definicji tabeli po operacji usunięcia i odtworzenia kolumn wyliczanych + zawartości tabeli temp_ComputedCols wygenerować skrypt, który doprowadzi tabelę do pierwotnej postaci - wszystkie kolumny są w tej samej kolejności co przed operacją. Linie skryptu mają być wygenerowane w języku TSQL w postaci procedury lub funkcji tabelarycznej. Jako jedyny parametr procedury/funkcji powinna być przekazana nazwa tabeli, dla której generujemy skrypt.

Warunki oceny rozwiązania:


1. Rozwiązanie nie może spowodować jakiejkolwiek utraty danych w tabeli
2. Rozwiązanie powinno wykonać minimalną liczbę manipulacji na danych i strukturze tabeli
3. Rozwiązanie powinno przewidywać, że jest więcej niż jedna kolumna wyliczana, tak jak w przykładzie
4. Rozwiązanie powinno być możliwie jak najszybsze

Dla uproszczenia zakładamy, że w chwili rozpoczęcia naprawy na tabeli, którą mamy naprawić nie ma żadnych więzów ani indeksów.

 

Czekam na rozwiązania konkursowe do końca 15-08-2008 - proszę o przysyłanie ich na mój mail z profilu na wss.pl. Najciekawsze rozwiązania opublikuję, a najlepsze nagrodzę na najbliższym spotkaniu PLSSUG. Do 10.08.2008 będę poza Polską i nie wiem, czy będę miał dostęp do maila, zatem proszę nie zrażać się brakiem mojej reakcji w tym czasie.

 

Pozdrawiam
Marek Adamczuk

Opublikowane 23 lipca 2008 21:24 przez mad

Komentarze:

Brak komentarzy

Komentarze anonimowe wyłączone