czwartek, 10 kwietnia 2014

T-SQL wyciąganie danych z arkusza MS EXCEL

W sieci istnieje kilka artykułów na ten temat, jednak żaden z nich od początku do końca nie daje uniwersalnego przepisu jak wciągnąć dane z arkusza MS EXCEL za pomocą T-SQL. Zagłębiając się w temat i kumulując te wszystkie informacje w sensowną całość, postanowiłem podzielic się instrukcją która działa bez problemu. Załużmy że mamy prosty arkusz excelowy np. taki:
Żeby wyciągnąć z tego jakieś sensowne dane które nas mogą interesować, trzeba nieźle się napocić z formułami excelowymi. Dla przykładu przedstawię kilka przykładów, które występują w codziennym życiu.
1. Wyświetlenie wszystkich zwolnionych pracowników, których pensja przekracza 2000,00 SQL
SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;IMEX=1;Database=g:\pracownicy.xls', 'SELECT * FROM [Sheet1$] where Pensja>2000 and Data_zwolnienia' )
Wynik w SQL Management Studio

2. Wyświetl wszystkich zwolnionych pracowników którzy przepracowali cały 2012r. SQL
SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;IMEX=1;Database=g:\pracownicy.xls', 'SELECT * FROM [Sheet1$] where Data_zatrudnienia<=datevalue("2012-01-01") and Data_zwolnienia>=datevalue("2012-12-31")' )
Wynik w SQL Management Studio

2. Wyświetl wszystkich zatrudnionych pracowników którzy przepracowali cały 2012r a ich pensja była mniejsza od 2000,00. SQL
SELECT * FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;IMEX=1;Database=g:\pracownicy.xls', 'SELECT * FROM [Sheet1$] where Data_zatrudnienia<=datevalue("2012-01-01") and Data_zwolnienia>=datevalue("2012-12-3") or isnull(Data_zwolnienia) and Pensja<2000' )
Wynik w SQL Management Studio

Jak widać takie podejście do plików excell, daje potężne możliwości. Co ciekawe w podobny sposób można potraktować inne pliki o olreślonej struktórze np. txt.