Avatar billede seeque Nybegynder
25. oktober 2002 - 09:35 Der er 6 kommentarer og
3 løsninger

Hente data fra to MS SQL databaser

Jeg har i spørgsmål 272937 (http://www.eksperten.dk/spm/272937) fundet lidt af det jeg søger med jeg har brug for et eksempel på hvordan man henter data (JOIN'er) fra to databeser der ligger på hver sin server.
Hvad gør man med brugernavn og password m.m hvis de nu er forskellige ?

Mvh
SeeQue
Avatar billede misbruger Nybegynder
25. oktober 2002 - 09:38 #1
Du bliver nød til at have en bruger der har adgang til begge databaser.
Avatar billede seeque Nybegynder
25. oktober 2002 - 09:53 #2
Hej Misbruger

Jeg har oplysninger om brugerrettigheder til begge database..... og jeg kan højst sandsynligt også komme til at bruge samme brugernavn og password til de to databaser.
Hvis dette er muligt kan du så give mig et eksempel på hvordan en sådan SQL-forespørgsel skal laves ?

Mvh
SeeQue
Avatar billede kennethrisum Nybegynder
27. oktober 2002 - 09:00 #3
Lav et VIEW i den database du bruger 'mest'. Dette view indeholder så

CREATE VIEW VIEW_TEST
AS
SELECT * FROM DB2.DBO.TAB1

Du kan så lave din forespørgsel som om begge 'tabeller' lå i den samme database.

Hvis brugernavn og password er forskellige kan du ikke gøre det. Så kræver det to connections til databaserne og man kan ikke joine i to connections.
Avatar billede seeque Nybegynder
29. oktober 2002 - 09:20 #4
Hej Kennethrisum
Jeg har prøvet dit foreslag, men kan ikke få det til at virke :-(.

Jeg sidder med en SQL-server et sted på et internt netværk, den er der intnt problem med at gå til.
Problemet er at jeg er ved at udvikle et VB-applikation som skal bruge et recordsæt som er sammen sat af data fra den interne SQL-database (las os bare sige at serveren hedder "InternDb") og fra en en ekstern SQL-database (lad os bare sige på adressen "www.eksterndb.dk")

Vil du prøve at skrive dit view igen med disse parametre, jeg syntes nemlig selv at jeg har prøvet alle muligheder.

Mvh
SeeQue
Avatar billede dyhrberg Nybegynder
29. oktober 2002 - 11:49 #5
Du kan ikke lave et sådant JOIN. Du er nødt til i din kode at indsætte et nyt kald til den anden database på den anden server. Jeg formoder at du vil køre et loop og i dette loop vil du hente "andre" RELATEREDE data fra en anden database og vise samtidigt, Er det rigtigt?

Kald 1:

dim CRDConn
CRDConn = "Provider=SQLOLEDB; Data Source=NavnPaaSQLServer; Initial Catalog=NavnPaaDatabase; User ID=BrugerNavn; Password=BrugerPassword"
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject("ADODB.Recordset")
objConn.Open CRDConn
objRs.Open "SELECT * FROM News", objConn, 0, 1


do while not objRs.EOF


'________kald2 - Her indsætter du så et nyt kald til den anden server
dim CRDConn2
CRDConn2 = "Provider=SQLOLEDB; Data Source=NavnPaaSQLServer2; Initial Catalog=NavnPaaDatabase2; User ID=BrugerNavn; Password=BrugerPassword"
Set objConn2.....
.......
.....

'________Slut på kald2



objRs.MoveNext
Loop


objRs.close
.......


Håber det kan hjælpe dig...
Avatar billede dyhrberg Nybegynder
29. oktober 2002 - 11:51 #6
Der er en lille fejl idet at du selvfølgelig IKKE skal LOOPE de ting i KALD2 der er statiske som fx. Connection-string'en mv. Det sætter du bare lige før loopet starter.
Avatar billede wann Nybegynder
27. november 2002 - 14:53 #7
En anden løsning kan være at replikere data fra din eksterne server til den interne, Ellers kan du oprette den eksterne DB som en linked server på den interne,
Her skal du indtaste navnet på serveren, brugernavn, password til den eksterne server.
Og der efter laver du en sætning som denne

select i.CustomerId, i.CompanyName, e.freight
from internDB.northwind.dbo.customers i, eksternDB.Northwind.dbo.Orders e
where i.CustomerID = e.CustomerID

Dette har jeg lige testet, og det virkede.
Avatar billede cynosure Nybegynder
27. november 2002 - 15:02 #8
Hvorfor ikke placere det hele bag forhænget... Lav et VIEW i den ene af DB'erne og lad dette view læse via en linket DB (under security delen i Enterprise Manager). Lav dernæst den logik du skal i en stored procedure. Voila, du får det data du skal bruge.. Du adskiller logikken fra præsentationen og dermed også fra eventuelle hacks fra dit scriptingsprog...
Du skal dog være opmærksom på skaleringen under linkede servere i MS SQL.. Jeg tænker her primært på hastigheden i forhold til datamængden
Avatar billede seeque Nybegynder
15. januar 2003 - 12:12 #9
Det må i s*u meget undskylde !!
Problemet skulle være brugt på mit arbejde, men eftersom jeg er blevet fyret derfra røg mit indlæg her lidt i glemmebogen. Jeg har fordelt de 60 point som på stående fod syntes passende.
Mange tak for de indlæg der kom... og eeehhhh.... No hard feelings i hope :-)

Mvh
SeeQue
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