Chciałbym skopiować zawartość tabeli z kilku baz do jednej bazy zbiorczej ale żeby to można wykonywać jakoś z automatu. Mam np. 10 baz danych w których struktura jest identyczna. Chciałbym teraz jedną z tabel każdej bazy złączyć w jedną. Jednak jest pewien mankament. Mamy klucz główny i w każdej bazie dane są numerowane od nowa, mi w sumie wartość z tej kolumny nie jest do niczego potrzebna. Przykładowo:
BAZA A
Col1 Col2 Col3
Row11 Row12 Row13
Row21 Row22 Row23
BAZA B
Col1 Col2 Col3
Row11 Row99 Row88
Row21 Row00 Row55
Chciałbym dostać
BAZA AB
Col2 Col3
Row12 Row13
Row22 Row23
Row99 Row88
Row00 Row55
I tu nie chodzi o wyciągnięcie danych z dwóch tabel i przepisanie do trzeciej tylko ta nowa tabela będzie w zupełnie innej bazie.
W wypadku kilku baz problemu nie ma. Ale musisz określić jak zmieniają się kopiowane tabele, czy chcesz mieć ich backup / kopiujemy na nowo / czy chcesz mieć dopisywane wartości do tabeli głównej. Jeśli dopisujemy jak zmieniają się te tabele (przede wszystkim id, czy możliwe jest kopiowanie / usuwanie / edycja rekordów).
Chciałbym mieć jedną bazę zbiorczą w której jest wszystko z np. 36 innych Jako że ID się powtarza chcę olać to ID bo ono do niczego mi się nie przydaje jednak sama zawartość innych kolumn jest już inna.
Pytałem też czy zmieniasz / usuwasz dane z kopiowanych tabel. Oraz czy zmienia się id w kopiowanych tabelach np mam 1 5 3 6 2 (nie liczą się relacje między nimi, ale konkretne informacje na temat każdej z osobna).
Ostatecznie można by wywalić to co masz i skopiować na nowo, ale to ci zarżnie twój system.
Nie rozumiesz mnie, ciebie interesuje tylko odczyt z bazy. A ja pytam co z nimi jest robione. (co może się dziać z danymi). Bez takich informacji nie warto nawet zaczynać.
Chyba że chcesz na nowo kopiować wszystkie tabele, za każdym razem, usuwając jednocześnie wcześniej pobrane (jeśli bazy są duże to możesz nie wyrobić w minutę / adminowi może się to nie spodobać).
Lista wszystkich baz jest zapisana w master…sysdatabases. Miałem na studiach funkcje i inne bajery w SQL jednak nieużywane przez dłuższy czas wychodzi z pamięci. Chciałbym pobrać name baz danych z sysdatabases a następnie przekierować wynik tak aby wyciągnąć dane z każdej bazy drugim zapytaniem. W języku programowania zrobię to bez problemu ponieważ wyciągnę nazwy baz danych a następnie dynamicznie wygeneruje zapytanie z union all tak aby połączyć wyniki ze wszystkich baz a następnie umieszczę w klauzuli from () i wyciągnę dane zapytaniem zewnętrznym. Ale jak by to wyglądało czysto SQLowo tak aby w C# mógł to wywołać przez zwykłe ExecuteReader()?
select All.KOL2, All.KOL3
from
(
select * from DB1..Tablica
union all
select * from DB2..Tablica
union all
select * from DB3..Tablica
) as All
where All.Col6 = "Cos Tam"
Czy ja wiem czy jest zagmatwane. Po prostu staram się unikać obróbki danych w aplikacji tylko chcę otrzymać odpowiednie dane od razu na wyjściu z bazy. Mógłbym wyciągnąć dane osobno dla każdej bazy a następnie skleić datatable przez merge. Zero problemu. Ale wolę żeby całe przetwarzanie wykonał silnik bazy danych. Potrzebowałem wyciągnąć dane z kilku baz więc stworzyłem zapytania łączone przez union a następnie z tych wszystkich danych wyciągam dane spełniające warunki. Cała obróbka wtedy wykonuje się na serwerze. A moje pytanie z ostatniego posta było tylko z ciekawości jak to zrobić czysto w sqlu ponieważ teraz całe zapytanie generuje w mojej aplikacji na podstawie danych z sysdatabases. Pierwotne pytanie polegało na połączeniu baz w jedną która się sama aktualizuje ale widzę że za dużo z tym problemu w przypadku gdy aplikacja (nie moja tylko ta która tworzy baz) aktualizuje wiersze.