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
> 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
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?
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