Avatar billede hynne Nybegynder
22. oktober 2004 - 09:39 Der er 10 kommentarer

Select data fra identiske tabeller i forskellige databaser

Jeg skal hente data fra ens tabeller i to forskellige databaser.
Da det er ret komplekse forespørgsler vil jeg helst køre det i en løkke, så jeg ikke får et vedligeholdelses-problem, men jeg kan ikke finde en måde at få USE til at fungere.
Her er det jeg egentlig vil opnå, men som sagt i en løkke i stedet:

use db1
select * into #Temp from ex1
use db2
select * into #Temp from ex1
Avatar billede bennytordrup Nybegynder
22. oktober 2004 - 09:41 #1
insert #Temp (Feltliste)
select *
from db1.dbo.ex1
union
select *
from db2.dbo.ex2
Avatar billede bennytordrup Nybegynder
22. oktober 2004 - 09:41 #2
select * skal nok erstattes af select <felteliste>

Desuden kan det være, at du skal bruge "union all", hvis der er ntext, text eller image-kolonner med i selecten.
Avatar billede hynne Nybegynder
22. oktober 2004 - 09:44 #3
Det skal som sagt i en løkke, da det er en ret kompleks sag (over 120 linier)
Avatar billede bennytordrup Nybegynder
22. oktober 2004 - 09:47 #4
Er det samme felter, der skal kopieres?

Hvad har du at styre løkken efter?
Avatar billede hynne Nybegynder
22. oktober 2004 - 09:54 #5
Jeg havde tænkt mig noget i stil med:

declare @a
set @a = 2
while @a > 0
begin
case @a
  when 2 then ... (fx sætte en variabel = database, men jeg ved ikke hvordan)
  when 1 then ...
end
select
...
end
Avatar billede bennytordrup Nybegynder
22. oktober 2004 - 09:57 #6
Hvor mange databaser? Hvor mange tabeller? Hvor store select-statements?

Problemet er, at du ikke kan bruge variable i select og use, så du skal i løkken bygge et SQL statement op i en eller flere varchar-variable og derfter udføre dem via execute.

Denne løsning giver IMHO langt større vedligeholdelsesproblemer end en fast kodet union select, som jeg skitserede.
Avatar billede hynne Nybegynder
22. oktober 2004 - 10:06 #7
Jeg skal hente data fra to databaser som er identiske i opbygning (tabellerne er helt ens). Som to databaser med samme type data fra to forskellige butikker i en kæde fx. Jeg bruger 3-4 tabeller, men data samles først i et par temp-tabeller.
Min select (inklusive konstruktion af nogle temp-tabeller) fylder over 120 linjer).
Er det ikke muligt at bruge en konstruktion som:

Declare @db <database>
set @db = db1 (eller 'db1')
select * from @db..ex1
Avatar billede bennytordrup Nybegynder
22. oktober 2004 - 10:24 #8
Kun ved at bygge det op i varchar variable og udføre en execute. Men det bliver IMHO mere uoverskueligt.
Avatar billede arne_v Ekspert
22. oktober 2004 - 21:15 #9
Skal det være i en SP ?

Det vil jo ikke være så svært at lave det i C# / ASP VBScript / hvad du nu foretrækker
at programmere i.
Avatar billede arne_v Ekspert
06. november 2004 - 17:55 #10
hynne ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester