lier schreef op vrijdag 24 september 2010 @ 16:57:
Dus je bent op zoek naar een stored procedure om op basis van twee tabellen die als parameter meegegeven moeten worden een merge uit moet voeren?
Lees eventueel
dit artikel, hierin wordt beschreven hoe je stored procedures moet aanmaken.
Ik weet wel hoe ik een stored procedure aan moet maken....
Het gaat me om het feit dat een MERGE query nu zo statisch als de pest is. Je moet opgeven welke tabellen het om gaat, welke velden je wilt gebruiken als keys om de twee met elkaar te vergelijken, hoe de insert eruit moet zien en hoe de update moet werken; een hoop werk wat je steeds moet herhalen.
Allemaal uitstekend, maar ik zit vaak met tabellen die ik gewoon 1-op-1 wil kopieren van database A naar database B. Nu zou je zeggen: tabel verwijderen en SELECT INTO gebruiken, maar dan creeer je dus een moment waarop de data niet beschikbaar is; niet wenselijk. Een MERGE is dus wenselijk, vaak aangevuld met een controle op datum (MERGE alle records die na tijdstip x gewijzigd zijn, en verwijder records die inmiddels niet meer bestaan in de bron tabel).
Het zou me een hoop gedoe besparen als er voor bovenstaand scenario, waarbij de tabellen in database A en B gelijk zijn aan elkaar qua structuur, een simpel statement zou zijn.
Dus: update tabel A met data uit tabel B, gebruik de primary key uit de tabellen (die dus ook gelijk is) en sync alleen records waarvan de datum in veld X (datum laatst gewijzigd) groter of gelijk is aan datum Y. Dat alles in 1 call.
SYNC(DB1.dbo.Tabel, DB2.dbo.Tabel, '2010-25-09 00:00:00');
Zo'n stored procedure valt wel te maken denk ik, maar ik kan me zo slecht voorstellen dat ik de eerste ben die dit verzint. Oftewel: hij bestaat vast al, toch!?
Het mooie hieraan is dat je o.a. met Linked Servers ook data kan overhalen uit andere databases dan SQL server, dus het is meteen een cross platform oplossing.
Wellicht zie ik soortgelijke opties over het hoofd, dat kan ook; wijs me daar dan aub op