Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: Dynamic db names in query
Prev Next
You are not authorized to post a reply.

Author Messages
Henk BeekhuisUser is Offline

Posts:13

24-04-2008 17:11:27 Alert 
In een synchronisatie routine tussen 2 db's die bij al onze klanten draaien(1 Productie, 1 Datasync met externe data) maken we gebruik van een join op een pk tussen de tabellen in de beide db's om de data te synchroniseren bijv :

INSERT INTO c (Code, Name, Address, ZipCode, Place, Region, Country, Phone, Fax, OVOTRACKCustomerID, RowChangedByOVOTRACK)
SELECT k.ZoekNaam,
    k.Naam,
    k.Adres,
    k.Postcode,
    k.Woonplaats,
    k.Provincie,
    k.Land,
    k.Telefoon,
    k.Fax,
    k.ID AS OVOTRACKCustomerID,
    1 AS RowChangedByOVOTRACK
FROM tblKlant                                    k
LEFT JOIN OVOTRACK_Sync..tblCustomer    c ON c.OVOTRACKCustomerID = k.ID
WHERE c.OVOTRACKCustomerID IS NULL

Deze query draait op de productie db en gaat dus kijken in de OVOTRACK_Sync db om data te vergelijken.
Nu wil het geval dat we voor beheersdoeleinden van iedere klant een copy van de Productie DB en van de sync DB hebben staan dus moet de sync DB net als de productie DB een onderscheidende naam hebben : OVOTRACK_Klantnaam (Productie) en OVOTRACK_Sync_Klantnaam (Sync DB)

Aangezien we alle productie DB's bij alle klanten identiek willen hebben , dus ook de SP's tbv datasync zullen we een manier moeten vinden om de naam van de sync DB in een variabele te kunnen stoppen bijv
DECLARE @DBName   NVARCHAR(50)
SET @DBNAME = Select DBName from tblDBSettings

Vervolgens zouden we dan in de Join kunnen zetten :
LEFT JOIN @DBNAME..tblCustomer    c ON c.OVOTRACKCustomerID = k.ID

Helaas dit gaat niet werken wie heeft een idee wat er wel werkt?

Bij voorbaat dank.


Robert HartskeerlUser is Offline

Posts:86

24-04-2008 17:43:07 Alert 
Henk,

je kan het gehele statement in een variabele zetten en dan met sp_executesql uitvoeren. BIjv.
DECLARE @cmd NVARCHAR(1000)
SET @cmd = 'INSERT.... LEFT JOIN ' + @DBNAME + ' ..tblCustomer c on c.OVOTRACKCustomerID = k.ID'
EXEC sp_executesql @cmd

Groeten,
Robert
Henk BeekhuisUser is Offline

Posts:13

24-04-2008 21:41:56 Alert 
Prima oplossing Robert, gaan we toepassen!
Peter RijsUser is Offline

Posts:20

06-05-2008 11:18:22 Alert 

De oplossing van Robert is inderdaad prima binnen de door jouw geschetste architectuur.

Voor een dergelijke synchonisatie zou ik zelf echter liever Integration Services inzetten, waarbij je de 2 databases als aparte connecties benoemd met de databasenaam als variabele, en in een DataFlowTask de nieuwe records er uit vist en afhandelt.
Je zou dan zelfs een For Each container kunnen gebruiken om de databases van meerdere klanten in 1 run te synchroniseren.

Zijn er redenen waarom Integration Services geen optie zou zijn?

Henk BeekhuisUser is Offline

Posts:13

19-05-2008 09:55:21 Alert 
Bedankt voor je reaktie Peter, De reden dat we geen integration services inzetten is dat we bij sommige klanten te maken hebben met sql express en geen bereidheid om te investeren in zwaardere versies. Vandaar dat we alles in TSql willen kunnen doen..
Ronald KraijesteijnUser is Offline

Posts:37

19-05-2008 13:03:55 Alert 
In SQLExpress zit ook SSIS hoor!

SQL2k5 tips/trick @ http://www.sqlblog.nl/
Peter RijsUser is Offline

Posts:20

19-05-2008 22:25:34 Alert 

SSIS in Express? Daar hoor ik graag wat meer over, want volgens mijn info is dat niet zo (of is er wellicht net als voor SSRS een "expansion pack")?

Ronald KraijesteijnUser is Offline

Posts:37

21-05-2008 17:16:42 Alert 
Hmmm nu ga ik twijfelen maar volgens mij heb je toch gelijk. Hier wat meer informatie:
http://msdn2.microsoft.com/en-us/library/ms143761.aspx
http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx

Je zou de standard edition kunnen overwegen, die kost niet zo gek veel.

SQL2k5 tips/trick @ http://www.sqlblog.nl/
Henk BeekhuisUser is Offline

Posts:13

22-05-2008 13:30:08 Alert 
Voor degene die het interesseert, wellicht is een optie om gebruik te maken van synonyms, hiermee kunnen we het hele probleem oplossen. ;-)
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > Dynamic db names in query



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use