[MS SQL] Połączenie tabel i zapis do innej tabeli w innej DB

Cześć

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.

http://dba010.wordpress.com/2011/01/17/ … rver-2005/

INSERT INTO BAZA AB(Col2,Col3)

SELECT Col2,Col3

FROM [server name].[database name].[owner name].[table name]

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 :wink: 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.

Ja mam dostęp tylko do odczytu do tych tabel. Ale mogę załatwić kopiowanie. A co do ID. Chyba nie, nie mam pojęcia w sumie

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ć).

Albo inne podejście.

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"

Bardzo zagmatwane to Twoje zapytanie, ale czy nie pomogłaby Ci czasem z Twoimi dynamicznymi zapytaniami procedura sp_executesql?

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.