Am 2 servere SQL 2005 care sunt linked intre ele. Mai am urmatoarele tabele pentru exemplificare
- Server1.dbo.Stocuri cu campurile: ProductID, Qty - tabela unde este tinut stocul in paleti
- Server2.dbo.Paleti cu campurile PalletID, ProductID, BestBefore - tabela unde am informatii despre paletii aflati in stoc.
Am nevoie de un rezultat de genul:
ProductID, Qty, min(BestBefore)
Unde ProductID vine din detaliile unei facturi. De exemplu factura1 are pe ea Product1, Product3, Product5, deci rezultatul final imi va arata ceva de genul:
Product1 19 01.10.2009
Product3 95 01.12.2009
Product5 22 11.09.2009
Interogarea va rula pe Server1. Va cer parerea sa ma lamuriti care ar fi cea mai buna modaliatate de a avea rezultatul dorit. Dupa cum vad eu treaba am mai multe posibilitati:
1) - pe Server 1 am un query (aproximativ) de genul:
Select ProductID, Qty, min(BestBefore)
From stocuri inner join Server2.dbo.palleti on productID=productID
Where ProductID in sau Exitst ....
Group by ProductID, Qty
Nu stiu aceasta metoda cat de multe transfer face intre cele 2 servere. Datele de pe server2 sunt aduse pe server1 si apoi facut joinul ?
2) - pe Server 1 am un query
Select ProductID, Qty, Server2.dbo.GetMyBestBefore(productID)
From stocuri
Where ProductID in sau Exitst ....
unde GetMyBestBefore(productID) este o functie scalara care imi returneaza best beforeul. Dar asta inseamna ca pentru fiecare linie de pe comanda imi cauta in tabela Paleti
3) - pe server 1 creez un string cu productID de pe comanda adica (Product1, Product3, Product5) pe care
il transmit ca si parametru unei functii tabelare. In functia tabelara am grija ca doar pentru id-urile din parametru
sa caut best beforeul.
Queryul ar arata in genul:
Select ProductID, Qty, t.BestBefore
From Stocuri inner join Server2.dbo.GetmyBestBefores('Product1, Product3, Product5')
Where ProductID in sau Exitst ....
M-ar interesa care modalitate consuma mai putine resurse si e mai rapida. Va multumesc.