Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Index z jednej tabeli indexem w drugiej
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
maqlik
Przede wszystkim witam forumowiczów!

Czytałem wiele artykułów jak i kursów ale na swój problem nadal nie znalazłem rozwiązania. Mniej więcej problem polega na tym:
W MS SQL 2008 Express mam pewną tabele (przyjmę że nazywać się będzie Tabela1). Chciałbym do tej tabeli dodać jeszcze jedną kolumnę ale z względu iż jest to tabela systemowa (programu księgowego) to chciałbym utworzyć drugą tabelę... w tym miejscu jest problem gdyż Tabela1 zawiera 2 kolumny (ID i Nazwa), a ja chcę dodać jeszcze 'Kategorie'. Jak mogę stworzyć nową tabelę (Tabela2) która miała by 3 kolumny ID = Tabela1.ID, Nazwa = Tabela1.Nazwa i Kategoria? Wiem że mogę użyć INSERT do wklejenia tych kolumn ale w przypadku gdy w Tabeli1 pojawią się zmiany to Tabela2 ich nie uwzględni.

Proszę o pomoc dla laika o ile to możliwe

i z góry dziekuję
Marcin
Theqos
Utwórz sobie tabele z kluczem obcym tabela1_id i kolumna kategoria. Kolumna z nazwą jest ci niepotrzebna bo przecież już jest w tabeli 1. Potem pobierasz dane z dwóch tabel za pomocą jednego joina i nie musisz nic synchronizować. Poza tym o co ci chodzi z tym indeksem?
Gapollo
Założenie tabeli z kluczem obcym może zaburzyć działanie programu księgowego podczas usuwania rekordów z tabeli1. Tak jak pisze Theqos najrozsąniejszym wyjściem jest tabela2 z polami id, kategoria. Jeśli bardzo zależy Ci na polu nazwa w tabeli2 to proponuję taki kod do synchronizacji tabel:
  1. INSERT INTO tabela2 (id,nazwa) SELECT id,nazwa FROM tabela1 WHERE id NOT IN (SELECT id FROM tabela2) -- nowe rekordy
  2. DELETE FROM tabela2 WHERE id NOT IN (SELECT id FROM tabela1) -- usunięte z tabela1
  3. UPDATE t2 SET nazwa=t1.nazwa FROM tabela1 AS t1 JOIN tabela2 AS t2 ON t1.id=t2.id WHERE isnull(t1.nazwa,'')<>isnull(t2.nazwa,'') -- "poprawienie" nazwy

Jeśli przed modyfikacją tabeli1 powstrzymywało Cię coś innego niż warunki licencji to można rozbić to wpasować w trzy triggery i w przypadku insert i update używać tabel inserted i updated w celu optymalizacji.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.