---
title: "Hämta användardata från annan server"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/164976-hämta-användardata-från-annan-server"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ironhead"
published: "2007-09-28T08:55:45.000Z"
updated: "2007-09-28T14:07:23.000Z"
replies: 2
views: 550
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/164976-hämta-användardata-från-annan-server"
---

# Hämta användardata från annan server

## #1 — ironhead, 2007-09-28T08:55Z

Hej!

Jag vill hämta data från ett flertal databaser (MSSQL2000 & 2005).
Det jag får problem med är att den enda gemensamma mellan dessa användare är användarnamn & lösenord.

Först skapar jag en temptabell med allt utom adressuppgifter som finns på en helt annan server ex:

```
CREATE Table #tempTbl(
	UserID int,
	User varchar(50),
	Pass varchar(50),
	Address varchar(500)
             )

INSERT INTO #tempTbl
	(
	 UserID,
	 User,
	 Pass
	)
	Select userID, User, Pass FROM Users
```

Nu vill jag uppdatera denna temptabell med adressuppgifterna från en annan databas-server.

```
UPDATE #tempTbl
             SET
	Address = (SELECT top 1 delivery_address FROM  
OPENDATASOURCE('SQLOLEDB','Data Source=192.168.x.x;User ID=xx;Password=xx').UserSettings.dbo.Users 
WHERE companyID = 3 
AND (user_name IN (SELECT User FROM #tempTbl) AND passw IN (SELECT Pass FROM #tempTbl)))
```

Detta funkar ju inte då jag inte vet hur jag ska få urskiljningen av användardatat från temp-tabellen...nu kollar den ju bara om användaren finns i temptabellen och uppdaterar första bästa värdet.

Ett problem till är att det kan finnas flera användare med samma användarnamn och lösenord från adress-databasen, men jag vill bara hämta den första adressen som den hittar (därav min illustration av TOP 1 :-/)

Hur ska jag skiva för att kunna matcha användaren med adressuppgifterna för respektive användare?

Alternativt: Kan man göra en join mellan flera olika tabeller i olika databaser och med tabeller/databaser på andra servrar?

Permalänk: https://www.webforum.nu/p/164976

## #2 — ironhead, 2007-09-28T12:47Z

Snart i mål...

Jag har kommit fram till denna koden...och den fungerar, adressuppgifterna hamnar för respektive användare

```
DECLARE @Temp TABLE(UserID int, User varchar(50), Pass varchar(50), address varchar(500))
 
INSERT n@Temp(UserID, User, Pass)
Select UserID, User, Pass FROM Users

UPDATE @Temp
SET address = a.maxrows
FROM DBUsers a 
INNER JOIN DBUseraccess c
ON a.user_number = c.user_number 
INNER JOIN @Temp b
ON b.User = a.User_name 
AND b.Pass = a.pass
```

...men hur ska man skriva när det gäller data från en annan databasserver? (MSSQL2005)

testade med:

```
UPDATE @Temp
SET address = c.address
FROM OPENDATASOURCE('SQLOLEDB','Data Source=192.168.x.x;User ID=xx;Password=xx').xx.dbo.sUsers c
INNER JOIN @Temp b
ON b.User = c.user_name
AND b.Pass = c.pass
```

men det ville inte fungera utan fick detta felmeddelande:

Server: Msg 7202, Level 11, State 2, Line 20
Could not find server '"xx"."dbo"."sUsers"' in sysservers. Execute sp_addlinkedserver to add the server to sysservers.

Vad betyder det? Hur ska man egentligen skriva?

Permalänk: https://www.webforum.nu/p/2035171

## #3 — ironhead, 2007-09-28T14:07Z

Löste det genom att "länka" dbservern

```
EXEC    sp_addlinkedserver
          @server = '[Alias du vill använda]',
          @srvproduct = 'SQLServer OLEDB Provider',
          @provider = 'SQLOLEDB',
          @datasrc = '[namn på fysisk db-server]'

UPDATE @Temp
SET address = c.address
[alias].[db].dbo.sUsers c
INNER JOIN @Temp b
ON b.user = c.user_name
AND b.pass = c.pass
```

Permalänk: https://www.webforum.nu/p/2035184

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/164976-hämta-användardata-från-annan-server
