Kā sajūgt Excel 2007 ar SQL serveri
Nezinu, kā jums, bet man reizēm gadās, kad dati no Excel tabulām ir jāiedabū SQL datubāzē. Reizēm vienkārši jāievieto, reizēm nākas izveikt arī dažādas transformācijas. Bieži šiem mērķiem izmantoju Excel funkciju CONCATENATE, ar kuras palīdzību saģenerēju INSERTus, kurus pēc tam izpildu SQL Server Management Studio.
Nesen radās vajadzība izmantot datus no tabulas ar apmēram 30 stabiņiem, no kuriem daudzi bija jāpielāgo atbilstoši vērtībām kādās datubāzes tabulās. Šajā gadījumā rakstīt milzīgo INSERTu, kuri ievietos datus pagaidu tabulā, konkatenāciju likās neprātīgi, tāpēc nolēmu izmēģināt alternatīvu – piesaistīt Excel failu kā saistīto serveri (linked server) SQL serverim un izmantot SQL teikumus, lai darbotos ar šīs tabulas datiem.
Lai varētu SQL serverim piesaistīt Excel 2007 failu kā saistīto serveri, uz datora, kur darbojas SQLs, nepieciešams uzstādīt Office 2007 Data Connectivity Components un izveidot savienojumu. Savienojumu var izveidot izmantojot grafiskos rīkus, bet es dodu priekšroku skriptam, kas izsauc sistēmas procedūru, jo šādu skriptu ir iespējams saglabāt un izmantot atkārtoti.
EXEC sp_addLinkedServer
@server= 'services',
@srvproduct = 'ACE 12.0',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = 'C:\temp\services.xlsx',
@provstr = 'Excel 12.0; HDR=No'
Tālāk jau var vienkārši izpildīt parastus SQL vaicājumus, kā piemēram:
SELECT * FROM services...sheet1$
vai
SELECT * FROM services...sheet1$ WHERE F2 = 'ddd'
Ja apskatam pievienošanas procedūras parametrus, tad tie īpašus komentārus neprasa. Vienīgais, kas varētu interesēt ir @provstr parametrs, kurā ir iespējams norādīt vai tabula satur stabiņu nosaukumus (HDR=Yes), vai arī tie nav norādīti (HDR=No). Otrajā gadījumā stabiņi būs numurēti, t.i. nosaukti nosaukumos F1, F2, u.t.t.
Ceru, ka kādam noderēs!