Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kopiowanie tabel miedzy bazami

854 views
Skip to first unread message

Marek

unread,
Sep 8, 2010, 4:19:50 PM9/8/10
to
Witajcie,

Mam taki problem - na jednym serwerze sa dwie niezalezne bazy danych MS SQL
BASE1 oraz BASE2. Roznia sie pod kazdym mozliwym wzgledem, lecz posiadaja jedna
wspolna tabele, nazwijmy ja roboczo TABLE.

Na pierwszej bazie ma ona taka strukture:
id | value
1
2
3
4
...

na drugiej ma taka strukture

id | value
1 a
2 b
3 c
4 d
...

chcialbym jednym zapytaniem przerzucic wartosci z BASE2.TABLE do BASE1.TABLE, id
obu baz sa jednakowe, jest ich taka sama ilosc, value na BASE2 posiada wartosci,
na BASE1 jest NULL. Podpowiedzialby ktos czy da rade zrobic taki myk zapytaniem?

Z gory dzieki.

Pozdrawiam,
Marek

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Krzysztof Jamróz

unread,
Sep 8, 2010, 5:05:17 PM9/8/10
to
Dnia Wed, 08 Sep 2010 22:19:50 +0200, Marek napisał(a):

> Mam taki problem - na jednym serwerze sa dwie niezalezne bazy danych MS SQL
> BASE1 oraz BASE2. Roznia sie pod kazdym mozliwym wzgledem, lecz posiadaja jedna
> wspolna tabele, nazwijmy ja roboczo TABLE.
>
> Na pierwszej bazie ma ona taka strukture:
> id | value
> 1
> 2
> 3
> 4
> ...
>
> na drugiej ma taka strukture
>
> id | value
> 1 a
> 2 b
> 3 c
> 4 d
> ...
>
> chcialbym jednym zapytaniem przerzucic wartosci z BASE2.TABLE do BASE1.TABLE, id
> obu baz sa jednakowe, jest ich taka sama ilosc, value na BASE2 posiada wartosci,
> na BASE1 jest NULL. Podpowiedzialby ktos czy da rade zrobic taki myk zapytaniem?

Jeśli tabele nie są specjalnie wielkie to najprostsze zapytanie:

UPDATE base1..table t1
SET value = (SELECT value from base2..table t2 where t2.id=t1.id)

Jeśli to działa za wolno lub nie ma indeksu na id (spodziewam się nested
loops dla podzapytania) - UPDATE na złączeniu.

--
Krzysztof Jamróz

PP

unread,
Sep 9, 2010, 3:30:47 AM9/9/10
to
On 2010-09-08 23:05, Krzysztof Jamróz wrote:

> Jeśli to działa za wolno lub nie ma indeksu na id (spodziewam się nested
> loops dla podzapytania) - UPDATE na złączeniu.
>

no właśnie:

update base1..table
set value=t2.value
from base1..table t1 inner join base2..table t2 on t1.id=t2.id

--
PP

szmajd...@poczta.onet.pl

unread,
Sep 9, 2010, 3:48:13 AM9/9/10
to

dzieki za szybka odpowiedz, ale kurcze, okazalo sie, ze jednak struktura ma
jeszcze dodatkowy problem tzn, wyglada tak:

id | id2 | value
1 1
1 2
1 3
2 1
2 2
2 3
...

id | id2 | value
1 1 a
1 2 b
1 3 c
2 1 d
2 2 e
2 3 f
...

wykonanie zaproponowanego zapytania daje rezultat:

Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Wsparlibyscie jeszcze?

Dobi

unread,
Sep 9, 2010, 7:26:26 AM9/9/10
to

>
> id | id2 | value
> 1 1
> 1 2
> 1 3
> 2 1
> 2 2
> 2 3
> ...
>
> id | id2 | value
> 1 1 a
> 1 2 b
> 1 3 c
> 2 1 d
> 2 2 e
> 2 3 f
> ...
>
> wykonanie zaproponowanego zapytania daje rezultat:
>
> Subquery returned more than 1 value. This is not permitted when the
> subquery
> follows =, !=, <, <= , >, >= or when the subquery is used as an
> expression.
>
> Wsparlibyscie jeszcze?


update base1..table
set value=t2.value
from base1..table t1 inner join base2..table t2 on t1.id=t2.id and
t1.id2=t2.id2

To tak na chłopski rozum...

Dobi

0 new messages