Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mssql2000] hoe relatie leggen tussen twee databases

Pagina: 1
Acties:

  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
Hello,

Ik heb een applicatie met een eigen database (laten we zeggen dat die app_db heet) die informatie mbt userid's moet wegschrijven. Normaal gesproken zijn je dan een relatie leggen met een user-tabel ofzo maar in dit geval staat deze tabel in een andere database waarin stamgegevens van die user staan. Informatie die in de app_db moet worden weggeschreven is slecht de key (het userid). Dit lijkt me een foreignkey.
Ik heb alleen geen idee hoe ik in mssql2000 een relatie kan leggen tussen twee tabellen die in verschillende databases te vinden zijn. (de db's draaien wel op dezelfde mssql server)

Ik heb al zitten denken om binnen de apps_db een query te maken naar de andere db en dan te kijken of dat userid bestaat maar dat moet slimmer kunnen met constrains lijkt mij :/

Kan dit uberhaupt. ?

https://k1600gt.nl


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

zoiets?
code:
1
2
3
select * from app_db..user_table as app_user
     inner join other_db..user_table as other_user on
     app_user.user_id = other_user.user_id

Programmer - an organism that turns coffee into software.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

De beste oplossing is om een UDF functie te schrijven welke als paraneter het userid meekrijgt en controleert of deze bestaat in de andere database. De functie kan gewoon de count terug geven.

Vervolgens kun je aan je eigen tabel een check constraint toevoegen:
SQL:
1
2
ALTER TABLE tblUser
ADD CONTRAINT chkUserExists CHECK (dbo.LookupUser(UserID) > 0);


LookupUser doet zelf een simpele select @count=count(UserID) from app_db..tblUser where UserID=@UserID en geeft de count terug. Als de check false terug geeft (count is 0), dan zal de insert/update niet lukken.

Je kunt echter geen rechtstreekse foreign key naar een externe database maken.

If it isn't broken, fix it until it is..


  • shades
  • Registratie: September 2001
  • Laatst online: 13-11 09:10
LuCarD schreef op donderdag 11 oktober 2007 @ 11:29:
zoiets?
code:
1
2
3
select * from app_db..user_table as app_user
     inner join other_db..user_table as other_user on
     app_user.user_id = other_user.user_id
Dat was niet de vraag. Hoef in iig niet meer de join zelf je verzinnen :)
Niemand_Anders schreef op donderdag 11 oktober 2007 @ 12:21:
De beste oplossing is om een UDF functie te schrijven welke als paraneter het userid meekrijgt en controleert of deze bestaat in de andere database. De functie kan gewoon de count terug geven.

Vervolgens kun je aan je eigen tabel een check constraint toevoegen:
SQL:
1
2
ALTER TABLE tblUser
ADD CONTRAINT chkUserExists CHECK (dbo.LookupUser(UserID) > 0);


LookupUser doet zelf een simpele select @count=count(UserID) from app_db..tblUser where UserID=@UserID en geeft de count terug. Als de check false terug geeft (count is 0), dan zal de insert/update niet lukken.

Je kunt echter geen rechtstreekse foreign key naar een externe database maken.
Okay,

ik moet alleen niet in de app_db checken of de user bestaat (daarin komt juist een fk te staan naar die user) maar in de db waarin de stamtabel met user zich bevindt. Het principe in me in iederval duidelijk.

https://k1600gt.nl