"El tudnád küldeni a heti riportot, Excelben?"
Nagyvállalatnál dolgozó, adatbázisokkal foglalkozó kollégák gyakran kapják ezt a kérést. Mi sem egyszerűbb - összedobom a lekérdezést, és átemelem Excelbe, hadd örüljön a főnök. És itt kezdődik a bonyodalom, legalábbis MS-SQL-t használók számára. (A többi RDBMS-sel kapcsolatban nincsenek tapasztalataim, de a lejjebb látható megoldás általános, bárhol alkalmazható szükség esetén)
Mert ugyan megvan a lekérdezésem, prímán fut is Management Studio-ban (vagy Query Analyzerben), de átrakni Excelbe, még a XXI. században sem triviális. Lehetőségek:
- Lefuttatom Grid nézetben (CTRL-D), kijelölöm, berakom XLS-be - csak éppen mezőnevek nem lesznek, azokat kézzel át kell írni az első sorba.
- Text módban futtatom (CTRL-T), kijelölöm, be XLS-be. Persze minden ömlesztve az első oszlopba fog kerülni. Sebaj, átkonvertálom (Text to Data), kicsit igazítok rajta
- Átmeneti táblába berakom (SELECT INTO), majd Export wizzard-dal kirakom XLS-be
No, ez macerás. Főleg, ha többször kell megtenni. Ráadásul az Excel hajlamos lesz például a dátum-mezőket számként megjeleníteni. Brrr....
Mennyivel egyszerűbb lenne, ha el lehetne menteni XLS-ben a query eredményét közvetlenül Management Studióból... De nem lehet.
Akkor nincs más hátra, mint előre - nekünk kell ezt megoldani.
De ha már nekikezdünk, az legyen
- Univerzális
- Több feladatra alkalmas
- Könnyen használható
- Dermoprotektor, és lehetőség szerint hidratáló is
Essünk neki.
Először is nézzük, milyen adatokra van szükségünk a lekérdezésekhez:
- Szervernév, adatbázisnév
- Belépési adatok (MS-SQL-nél preferált a windows authentikáció, így ezt én kihagyom)
- Maga a lekérdezés
- Ha több lekérdezést csinálnánk, akkor meg kell adni, hogy melyiknek hova tegye az Excel az eredményét.
Alakul. Már csak a futtatás van hátra. Írjunk egy makrót, ami
- Végigmegy a lekérdezéseken
- Lefuttatja őket az adott helyen
- Az eredmény berakja a megfelelő sheet-re, és hogy még szebb legyen, elé is írja a Title mező értékét, hogy még azt se nekünk kelljen bepötyögni. A "Main title" pedig jelenjen meg a sheet elején. (Tehát minden sheetnek lesz egy neve, lesz az elején egy "Main title", majd lekérdezésenként külön elnevezése is.
A végén pedig tegyünk egy jó nagy RUN gombot a lekérdezések alá - ebben az a legjobb, hogy bárki meg tudja nyomni míg mi kávézunk ugyebár..;-) (Persze jogosultságoknak rendben kell lennie)
A végeredmény itt található. Ötleteket használtam fel hozzá a netről, de a végleges kidolgozás saját munka. Lehet még tovább finomítani (paraméterek elhelyezése, hibakezelés, jobb sheet-kezelés, egyéb nyalánkságok), de valamit élvezetet hagyok Nektek is :-)
Használjátok egészséggel!